2010-05-20 2 views
0

У меня есть огромная база данных размером около 1 ТБ, большая часть пространства потребляется таблицей, в которой хранятся изображения, а таблицы имеют сейчас почти 800 тыс. Строк.Техническое обслуживание баз данных, оптимизация больших двоичных таблиц

Время отклика сервера увеличилось, хотелось бы узнать, какие методы следует использовать, или вы рекомендуете, разделение? o о том, как реорганизовать таблицу

, к каждой строке обращается столбец идентификатора изображения, и он имеет свой кластеризованный индекс по этому столбцу, и каждые два дня я реорганизую индекс и каждые 7 дней его перестраиваю, но, похоже, для работы

любые предложения?

+0

Внешние капли? :-) – 2010-05-20 16:50:14

+0

Что вы имеете в виду с внешними каплями? эта таблица является единственной в базе данных, в которой хэш-столбец varbinary. – jgemedina

+0

Я вижу некоторые запросы прямо сейчас, где таблица изображений соединена с другими, являются ли индексы, используемые в соединениях? внутренние соединения? в плане выполнения я вижу индексный указатель вместо индекса Seek – jgemedina

ответ

1

Если таблица кластеризована с помощью image_id, и вы всегда получаете доступ к файлу image_id, размер таблицы не имеет значения, и так же фрагментация (нет необходимости перестраивать).

Если вы видите снижение производительности, то в игре больше всего будет что-то другое. Вы проводите сканирование диапазона? Посмотрите в sys.dm_db_index_usage_stats, отличается ли столбец user_scans от 0? Это означает, что у вас есть запросы, которые выполняют сканирование.

Если вы не измеряете , где время увеличивается, вы будете снимать пробелы в темноте и никогда не будете правильно решать проблему. Примените методологический подход, например Waits and Queues, чтобы определить проблему.

Единственное, что я могу вам сказать прямо сейчас: Разделение - это никогда улучшение производительности. Он предназначен для обслуживания данных (включение/выключение) и для распределения нагрузки на контролируемый режим в файловых группах. Но вы никогда не можете ожидать разделения на улучшить производительность, вы можете в лучшем случае надеяться на равную производительность с помощью несегментированной таблицы.

+0

спасибо, посмотрим, что ...подумал, что разбиение будет делать. – jgemedina

+1

Любое улучшение производительности может сделать (через устранение разделов), индекс может сделать лучше. –

0

Если время отклика увеличивается, вы должны делать больше с этой таблицей, чем просто потянуть изображения для идентификаторов?

Какие еще столбцы данных хранятся в вашей таблице изображений?

Если у вас есть сгруппированный индекс на идентификаторе (вероятно, идентичность), это нормально, но, возможно, поможет добавить дополнительный некластеризованный индекс, который может покрывать критерии поиска.

Скажем, у вас также есть столбцы для имени или тега или региона или что-то еще в этой таблице изображений (и если вы не собираетесь вертикально разбивать эту таблицу на отдельные таблицы), то с некластеризованным индексом на теге id INCLUDE (имя), скажем, или что-то, что соответствует вашим шаблонам использования, поможет много.

Помните: кластерный индекс не является индексом, это всего лишь способ организации данных. Как правило, это не помогает в каких-либо поисковых операциях - оно в первую очередь хорошо работает при поиске идентичности, когда вы читаете почти каждый столбец и потоки данных в порядке кластеризованного индекса.

+0

выборки строк в основном выполняются столбцами идентификаторов, есть еще одно полевое хеш-поле, которое содержит контрольную сумму файла md5 для каждого изображения, например идентификатор, который также индексируется, но не включенный столбец. Возможно, мне стоит взглянуть на то, что говорит Ремус, узнать, есть ли у меня сканирование вместо указателей, и, как вы мне рассказываете, также проверяйте запросы, чтобы я мог проверить, правильно ли настроены мои текущие индексы. спасибо – jgemedina

+0

@jgemedina Используется ли хэш для чего-либо? Это вся таблица (id, hash, image)? Я действительно не вижу, как ваша производительность не должна масштабироваться - не учитывая аппаратное обеспечение, конфигурацию или группы файлов и т. Д. (Что лучше оставить serverfault.com). –

+0

содержит id, hash, image_data, status, loaded_date и есть еще одна таблица называемые image_attributes, который содержит имя и другие свойства, такие как dimension_x, dpi и т. д. эти таблицы частично связаны друг с другом, используя столбец идентификатора из таблицы изображений, а внешний ключ в Image_Attributes с именем image_id – jgemedina