Как рассчитать соотношение чтения / записи в Sql Server? - PullRequest
2 голосов
/ 06 мая 2010

Как запросить соотношение чтения / записи в Sql Server 2005?Есть ли какие-либо предупреждения, о которых мне следует знать?

Возможно, их можно найти в запросе DMV, стандартном отчете, пользовательском отчете (т. Е. На панели мониторинга производительности) или при проверке трассировки Sql Profiler.Я точно не уверен.

Почему меня это волнует?

Я трачу время на повышение производительности слоя данных моего веб-приложения.Он имеет дело с миллионами записей и тысячами пользователей.

Один из пунктов, который я рассматриваю, - параллелизм в базе данных.Sql Server по умолчанию использует пессимистичный параллелизм - хорошо для приложения с интенсивной записью.Если мое приложение предназначено для чтения, я мог бы переключить его на оптимистический параллелизм (уровень изоляции: read committed snapshot), как Джефф Этвуд сделал со StackOverflow .

Ответы [ 4 ]

4 голосов
/ 06 мая 2010

Все приложения предназначены только для чтения.

  • ОБНОВЛЕНИЕ - это чтение предложения WHERE с последующей записью
  • INSERT должен проверять уникальные индексы и FK, которые читаются и почему вы индексируете столбцы FK

При большинстве у вас 15% записей. Я видел статью, однажды обсуждающую это, но не могу найти это снова. Скорее всего 1%.

Я знаю, что в наших 6 миллионах новых строк в день БД у нас по-прежнему минимум 95% + чтений (оценка, конечно).

Зачем вам нужно знать?

Также: Как узнать статистику чтения / записи таблицы SQL Server?

Редактировать, основываясь на обновлении вопроса ...

Я бы оставил параллелизм БД, пока вам не понадобится его изменить. Мы ничего не меняли из коробки для наших 6 миллионов строк + тяжелое чтение тоже

Для настройки нашего веб-приложения мы разработали его для сокращения количества обращений (один вызов = одно действие, множество записей для каждого вызова и т. Д.)

1 голос
/ 26 марта 2012

Как насчет нахождения отношения num_of_writes & num_of_reads счетчиков в sys.dm_io_virtual_file_stats?

1 голос
/ 06 мая 2010

Проверить sys.dm_db_index_usage_stats :

  • ищет, сканирует, все поиски читаются
  • обновления пишутся

Имейте в виду, что счетчики сбрасываются при каждом перезапуске сервера, смотреть на них нужно только после запуска репрезентативной загрузки.

Существуют также некоторые счетчики производительности, которые могут вам помочь:

Из этих показателей вы можете получить довольно хорошую оценку соотношения чтения и записи ваших запросов.

после вашего обновления

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

alter database <dbname> set allow_snapshot_isolation on;
alter database <dbname> set read_committed_snapshot on;

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

Вам также следует выяснить, не выполняются ли ваши чтения при уровне изоляции чтения сериализации, что и происходит, когда TransactionScope используется без явного указания уровня изоляции.

Одно слово предостережения о том, что хранилище версий не совсем бесплатно. См. Использование ресурсов управления версиями строк . И вы должны прочитать Изоляция транзакций на основе управления версиями строк в SQL Server 2005 .

0 голосов
/ 06 мая 2010

Я сделал это с помощью SQL Server Profiler. Я просто открыл его перед запуском приложения и проверил, какие запросы выполняются, пока я что-то делаю в приложении. Но я думаю, что лучше просто убедиться, что запросы работают, не знаю, удобно ли это для измерения нагрузки на сервер, как это. Профилировщик также может сохранять трассированные данные, которые вы можете проанализировать позже, чтобы он мог работать.

...