Как большие капли влияют на производительность удаления SQL, и как я могу смягчить влияние? - PullRequest
2 голосов
/ 22 февраля 2011

В настоящее время у меня возникает странная проблема, с которой мое понимание SQL-сервера не совсем совпадает.Мы используем SQL в качестве хранилища файлов для нашей службы внутреннего хранения, и в нашей базе данных содержится около полумиллиона строк.Большинство файлов (86%) имеют размер 1 Мб или меньше, но даже на свежих копиях нашей базы данных, где мы просто заполняем таблицу данными для целей теста, оказывается, что строки с большими объемами данных, хранящиеся в BLOB, частовызвать таймауты, когда наш сервер SQL находится под нагрузкой.Мое понимание того, как SQL-сервер удаляет строки, состоит в том, что это процесс сбора мусора, то есть строка помечается как призрак, а строка впоследствии удаляется процессом очистки призрака после того, как изменения будут скопированы в журнал транзакций.Это наводит меня на мысль, что независимо от размера данных в BLOB, удаление строк должно быть близко к мгновенному.Однако при удалении этих строк мы определенно испытываем большое количество тайм-аутов и поразительно низкую производительность.

В нашем наборе тестовых данных это файлы размером более 30 МБ, которые вызывают эту проблему.Это крайний случай, мы не часто сталкиваемся с этим, и хотя мы рассматриваем файловый поток SQL как решение некоторых наших проблем, мы пытаемся сузить источник этих проблем.

Мы выполняем удаление внутри транзакции.Мы также выполняем обновления метаданных, таких как статистика размера файла, но они существуют в отдельной таблице отдельно от данных файла.Данные иерархии хранятся в таблице, которая содержит информацию о файле.

Действительно, в конце концов, это не так много, что мы делаем с удалениями, которые имеют значение, мы просто не можем найти никаких ссылок на низкое удалениепроизводительность на строках, которые содержат большой объем данных в BLOB.Мы пытаемся определить, стоит ли исследовать этот путь, или это должен быть один из наших процессов, связанных с удалением, которое вызывает проблему.Есть ли ситуации, в которых это может произойти?Является ли обычным для сервера базы данных время полного истечения времени ожидания, когда многие из этих удалений происходят одновременно?Есть ли способ борьбы с этой проблемой, если она существует?

1 Ответ

2 голосов
/ 22 февраля 2011

Вы описываете проблему с производительностью, и, как и с любой проблемой с производительностью, вам нужно подойти к ней, сначала измеряя .Гадание никуда не приведет вас быстро.Поэтому используйте подходящую методологию расследования, и Ожидания и очереди , опять же, применимы идеально.Наблюдайте, собирайте данные и анализируйте.Вы непременно узнаете, что вызывает тайм-аут запросов (это блокирует? Это IO? Это CPU?), И на основе фактических результатов мы можем порекомендовать правильное исправление.

Как ответить вамНепосредственный вопрос: нет, удаление BLOB не вызовет ни одного из описанных вами симптомов.Это типичные раздоры симптомы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...