Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Какими блоками наиболее часто SQL Server читает с диска  [new]
Mikhalich
Member

Откуда:
Сообщений: 291
SQL Server 2008 x64. Памяти более чем достаточно. OLTP-приложение. Какими блоками будет наиболее часто читать/писать SQL Server - 8 КБ или 64 КБ???
23 июл 12, 09:36    [12900519]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
svenom
Member [заблокирован]

Откуда:
Сообщений: 3242
Под "logical read" всегда, независимо от платформы понимается page, то есть 8кб.
23 июл 12, 09:50    [12900572]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
Mikhalich
Member

Откуда:
Сообщений: 291
svenom
Под "logical read" всегда, независимо от платформы понимается page, то есть 8кб.


А там всякие упреждающие чтения и т.п.??? Или он чисто 8 килобайт читает и все?
23 июл 12, 10:56    [12900908]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Reading Pages
23 июл 12, 11:17    [12901042]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Mikhalich
svenom
Под "logical read" всегда, независимо от платформы понимается page, то есть 8кб.


А там всякие упреждающие чтения и т.п.??? Или он чисто 8 килобайт читает и все?


BOL->Understanding Pages and Extents
BOL->Writing Pages
BOL->Reading Pages
23 июл 12, 11:19    [12901059]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Mikhalich
SQL Server 2008 x64. Памяти более чем достаточно. OLTP-приложение. Какими блоками будет наиболее часто читать/писать SQL Server - 8 КБ или 64 КБ???
Для файла данных 64 КБ
Для лога будет запись мелкими блоками, но последовательно, так что если лог на отдельном диске/рейде, то будет быстро.
23 июл 12, 11:31    [12901139]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
step_ks
Member

Откуда:
Сообщений: 936
Mikhalich
Какими блоками будет наиболее часто читать/писать SQL Server - 8 КБ или 64 КБ???
смотреть счетчики Avg. Disk Bytes/Read, Avg. Disk Bytes/Write
23 июл 12, 12:09    [12901535]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
Mikhalich
Member

Откуда:
Сообщений: 291
Я так понял весь ввод/вывод с диском SQL Server производит экстентами (т.е. блоками в 64КБ)?
23 июл 12, 15:43    [12903387]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
svenom
Member [заблокирован]

Откуда:
Сообщений: 3242
Mikhalich
Я так понял весь ввод/вывод с диском SQL Server производит экстентами (т.е. блоками в 64КБ)?
Нет, страницами, а не экстентами.
23 июл 12, 15:57    [12903539]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Mikhalich,

При чтении с диска, сервер может использовать блоки данных различной длины (кратные размеру страницы) от 8кб до 512кб.
Можете взять filemon и сами поэкспериментировать. Вот картинка моих когда-тошных экспериментов.
23 июл 12, 16:14    [12903727]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Enterprise редакция "умеет" читать блоками до 1 024 страниц.
23 июл 12, 16:17    [12903760]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
svenom
Mikhalich
Я так понял весь ввод/вывод с диском SQL Server производит экстентами (т.е. блоками в 64КБ)?
Нет, страницами, а не экстентами.
Откуда инфа???

Конечно, читает минимум экстентами.
23 июл 12, 16:34    [12903913]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
alexeyvg,

Если минимум, то все же страницами.
23 июл 12, 16:37    [12903937]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
svenom
Member [заблокирован]

Откуда:
Сообщений: 3242
alexeyvg
svenom
пропущено...
Нет, страницами, а не экстентами.
Откуда инфа???
Конечно, читает минимум экстентами.

1) Чисто логическая выкладка - все мы знаем, что бывают mixed-экстенты. По сути, вся база может состоять только из них. В итоге, если нам надо прочитать данные из таблицы, которая раскидана по таким экстентам, нам потребуется считывать значительно больше информации, чем реально нужно. В предельно плохом случае, Для чтения N Кб SQL Server считает 8N Кб. Разумеется, программисты SQL Server таким маразмом не страдали
2) Выкладка SomewhereSomehow выше. Мы там видим чтение и по 8Кб, то есть постранично.
23 июл 12, 16:50    [12904039]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Есть немного инфы в старом whitepaper по 2000-му тут http://technet.microsoft.com/library/Cc966500.
В частности вот цитата.
ReadFileScatter
Primarily used by the buffer pool to read pages into the buffer pool. Can be used for single page requests as well as read-ahead requests. Read-ahead requests are generally 128 pages for each group but can be as many as 1,024 pages when running Microsoft SQL Server Enterprise Edition.

Когда опять же я интересовался этой темой, я спросил человека из команды access methods, он подтвердил что эта функция по прежнему используется и в новых версиях сиквела. Только вот насчет конкретных цифр я не спрашивал, думаю минимальный порог логично в одну страницу, а вот максимальный хз. Я лично видел 512 кб, но тестировал точно не на enterprize т.к. целью тестов не было выяснить максимальный порог, по этому говорю только то что видел.
Вот еще обсуждение косвенно касающейся темы.

Сообщение было отредактировано: 23 июл 12, 17:05
23 июл 12, 16:57    [12904098]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
SomewhereSomehow,

сори, где-то промахнулся с тэгами.
23 июл 12, 16:59    [12904109]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
SomewhereSomehow
SomewhereSomehow,

сори, где-то промахнулся с тэгами.
Fixed.


Сообщение было отредактировано: 23 июл 12, 17:05
23 июл 12, 17:05    [12904145]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
SomewhereSomehow
alexeyvg,

Если минимум, то все же страницами.
Да, с минимумом я неправильно выразился. Сиквел может прочитать страницу, но на практике это редко бывает.
svenom
1) Чисто логическая выкладка - все мы знаем, что бывают mixed-экстенты. По сути, вся база может состоять только из них. В итоге, если нам надо прочитать данные из таблицы, которая раскидана по таким экстентам, нам потребуется считывать значительно больше информации, чем реально нужно. В предельно плохом случае, Для чтения N Кб SQL Server считает 8N Кб. Разумеется, программисты SQL Server таким маразмом не страдали
Ну вот, наверное, только для mixed-экстентов он страницы и читает. Хотя тоже непонятно зачем.

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

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

А mixed-экстенты можно прочитать все в кеш (их же мало) и сервер за ними к диску больше может не обращаться.

Есть только вариант обращения к произвольным записям - да, в этом случае может быть выгоднее читать страницы. Теоретически. Но на практике это всё равно невозможно, поскольку физчески в рейдах страйпы делают не меньше 64 к (а часто 256 и более), поэтому при чтении N Кб с физических дисков будет считано 8N Кб, независимо от желаний программистов SQL Server.
23 июл 12, 17:30    [12904321]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Гавриленко Сергей Алексеевич,
Спасибо.

alexeyvg,
Да, я конечно говорил о теоретическом минимуме. Насчет изначального вопроса, не какими вообще возможно, а какими чаще, я не высказываюсь. Может вы и правы. В принципе, в 2012 сервере при помощи xevent можно попробовать собрать такую статистику, но, имхо, бессмысленно это делать на сферической базе данных, лучше если ТС это выяснит сам для своей БД.
23 июл 12, 19:54    [12905066]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
alexeyvg
Для лога будет запись мелкими блоками, но последовательно, так что если лог на отдельном диске/рейде, то будет быстро.
Откуда такая инфа? Какой смысл гонять диск ради мелких блоков? И если на диске 2 лога от разных БД, то всё, преформанс ниже плинтуса.
По моему, вполне логично было бы писать лог блоками по 60К, по-моему именно такой буфер выделен в памяти под лог. Есть подозрение, что именно так лог и пишется.
24 июл 12, 01:18    [12905914]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Mind
alexeyvg
Для лога будет запись мелкими блоками, но последовательно, так что если лог на отдельном диске/рейде, то будет быстро.
Откуда такая инфа? Какой смысл гонять диск ради мелких блоков? И если на диске 2 лога от разных БД, то всё, преформанс ниже плинтуса.
По моему, вполне логично было бы писать лог блоками по 60К, по-моему именно такой буфер выделен в памяти под лог. Есть подозрение, что именно так лог и пишется.
Насколько я знаю, лог пишется блоками 512 байт и более - в зависимости от размера транзакции. Если запись последовательная, то перфманс достигается пиковый для диска, разницы с большими блоками нет.

Объединять блоки записи нельзя, т.к. транзакция считается завершённой (и код выполняется дальше) после записи лога этой транзакции на диск. В принципе логично было бы это настраивать (если некритично потерять немного данных, то можно было бы копить лог в буфере, а потом уже сбрасывать на диск), но вот разработчики сиквела сделали так. Можно только включить кеширование аппаратно, на контроллере рейда, если возможно.

И да, если на диске 2 лога от разных БД, то всё, преформанс ниже плинтуса. Хотя конечно зависит от нагрузки на эти БД.

Инфа из бол и из статей Александра Гладченко.
24 июл 12, 08:12    [12906189]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
alexeyvg
Mind
пропущено...
Откуда такая инфа? Какой смысл гонять диск ради мелких блоков? И если на диске 2 лога от разных БД, то всё, преформанс ниже плинтуса.
По моему, вполне логично было бы писать лог блоками по 60К, по-моему именно такой буфер выделен в памяти под лог. Есть подозрение, что именно так лог и пишется.
Насколько я знаю, лог пишется блоками 512 байт и более - в зависимости от размера транзакции. Если запись последовательная, то перфманс достигается пиковый для диска, разницы с большими блоками нет.

Объединять блоки записи нельзя, т.к. транзакция считается завершённой (и код выполняется дальше) после записи лога этой транзакции на диск. В принципе логично было бы это настраивать (если некритично потерять немного данных, то можно было бы копить лог в буфере, а потом уже сбрасывать на диск), но вот разработчики сиквела сделали так. Можно только включить кеширование аппаратно, на контроллере рейда, если возможно.

И да, если на диске 2 лога от разных БД, то всё, преформанс ниже плинтуса. Хотя конечно зависит от нагрузки на эти БД.

Инфа из бол и из статей Александра Гладченко.
Спасибо, кажись понял. Когда транзакция коммитится, то буфер должен быть немедленно сброшен на диск, даже если там в логе всего 512 байт. Если же у нас одна большая транзакция, то буфер будет сбрасыватся по мере накопления, и тогда блоки записи будут по 60Кб.
24 июл 12, 08:50    [12906293]     Ответить | Цитировать Сообщить модератору
 Re: Какими блоками наиболее часто SQL Server читает с диска  [new]
Mikhalich
Member

Откуда:
Сообщений: 291
По совету SomewhereSomehow посмотрел дисковую активность sqlservr.exe (но для SQL Server 2005 x32) с помощью Procmon.exe за минут 5 (дальше Procmon.exe заорал и не стал сохранять события). Получилось, что блоки могут быть совершенно любыми (от 512 до 524288 байт), но 75% - это блоки 8192 байт.
24 июл 12, 16:50    [12909653]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить