Какие спецификации компьютера (ЦП, ОЗУ, скорость диска) я должен использовать для выполнения запросов к базе данных, содержащей более 200 миллионов записей? Запросы предназначены для исследовательского проекта, поэтому есть только один «пользователь», и только один запрос будет выполняться одновременно.
Я попробовал это на своем ноутбуке с SQL Server с процессором i3, 2 ГБ ОЗУ, диском со скоростью 5400 об / мин, и простой запрос не завершился даже через 8+ часов. У меня есть возможность подключить SSD через eSata и обновить ОЗУ до 4 ГБ, но я не уверен, будет ли этого достаточно ...
Спасибо!
Изменить: база данных составляет около 25 ГБ, а индексы не настроены должным образом. Когда я попытался добавить индекс, я дал ему поработать около 8 часов, но он все еще не завершился, поэтому я сдался. Стоит ли набраться терпения :)?
В общем, запросы будут запускаться время от времени, и все в порядке, даже если на выполнение потребуется пара часов ....
Кроме того, запросы будут производить около 10 миллионов записей, которые мне нужно обработать с помощью Stata / Matlab, и я обеспокоен тем, что мой текущий ноутбук недостаточно силен, но не уверен в узком месте ...
Вы не жаловались на то, сколько времени потребовалось, чтобы заполнить БД 200 миллионами записей, поэтому я прихожу к выводу, что ваш ноутбук достаточно быстр.
Базы данных работают, потому что они хранят записи данных с определенными "ключевыми" полями, проиндексированными для обеспечения быстрого доступа. (В противном случае каждый запрос должен был бы читать каждую запись каждый раз, а чтение 25 ГБ занимает много времени).
Если ваш запрос должен давать скромное количество результатов (скажем, 10K записей), я предполагаю, что ваша проблема в том, что ваши записи не индексируются основным элементом запроса.
Спецификация оборудования для огромной базы данных - это то, что невероятно сложно сделать правильно. У нас есть несколько больших баз данных (более 9 миллионов записей в некоторых таблицах) и одна огромная база данных (более 300 миллионов записей в большинстве таблиц), и даже для нас это было чем-то вроде удачного случая.
Но так же важна, как и технические характеристики оборудования, ваша схема базы данных, и, как сказал Ира, индексы являются королем в этом сценарии.
Создание индекса займет гораздо больше, чем 8 часов, и таблица должна быть полностью разблокирована, поскольку создание индекса блокирует всю таблицу. Индекс, на создание которого уходит много времени, часто является признаком заблокированной таблицы, поэтому при попытке сделать это убедитесь, что базу данных не использует ничто другое.
Что усложнит вам задачу в этом сценарии, так это скорость вашего диска. Один жесткий диск со скоростью вращения 5400 об / мин (я видел ноутбуки с еще более низкой скоростью вращения шпинделя, 5400 - неплохой вариант для ноутбука) загружает данные в кеш для индексации намного дольше, чем диск с 15000 об / мин. Для сравнения, наш SQL-сервер имеет 14 дисков по 15000 об / мин (всего 210000 об / мин или колоссальная скорость вращения шпинделя в 38 раз, и я предполагаю, что в реальной жизни скорость доступа может быть в 50 раз выше), и я ожидал создания индекса для На запись 200 миллионов записей по-прежнему потребуется больше часа.
Итак, возьмите этот SSD, если можете. Это резко поможет. Прирост производительности одного твердотельного накопителя по сравнению с диском на 5400 об / мин почти слишком велик, чтобы его измерить.
Если можете, получите 4 Гб ОЗУ. Это не только повысит скорость вашего SQL-сервера (не так сильно, как SSD, но все равно поможет), но, судя по моему (краткому) опыту работы с Matlab, это тоже поможет.