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

Откуда:
Сообщений: 44
И еще раз здравствуйте, знатоки!
В продолжение своего тернистого пути к матерому SQL-щику, еще 1 вопрос:
*предыстория*
Один из наших специалистов померял производительность дисковой подсистемы утилитой diskspd, и обнаружил, что при количестве потоков (threads), равным от 16 и выше - производительность снижается (что логично) до неприемлимого уровня (время отклика от 80 мс и выше).
Теперь он заявляет, что в связи с тем, что в нашей БД может работать от 20 до 30 человек одновременно + строются индексы + проходят бекапы логов, и т.д. - количество потоков в нашем случае может достигать 40-50 и более.
*предыстория закончена*

Собственно, вопрос: насколько я понимаю, пользователей БД нельзя считать как отдельные "потоки данных", которые указаны в утилите тестирования? Ведь поток то один (и вообще есть ли поток).
Гугл сходу мне на этот вопрос не ответил, может подкинете мат.часть.
Спасибо!
25 янв 18, 14:37    [21138560]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36968
Время отклика не характеризует производительность, оно характеризует нагруженность. Производительность характеризуется показателями чтени/записи в период времени.

Сообщение было отредактировано: 25 янв 18, 14:54
25 янв 18, 14:53    [21138623]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
AngryError
Member

Откуда:
Сообщений: 44
Гавриленко Сергей Алексеевич,
Ок, нужно будет помониторить этот параметр.
25 янв 18, 15:11    [21138682]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Исходите из того, на что вы можете повлиять.

На дисковую систему можете как-то влиять ?
На объем памяти ?
На SQL-код/бизнес-логику ?
На кол-во юзеров ?
25 янв 18, 16:02    [21138909]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
AngryError
Member

Откуда:
Сообщений: 44
LSV
Исходите из того, на что вы можете повлиять.

На дисковую систему можете как-то влиять ?
На объем памяти ?
На SQL-код/бизнес-логику ?
На кол-во юзеров ?


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

Сейчас ставлю тест 8КБ блоками в 32 потока (длина очереди - 16) без учета кешей системы на запись вот такие результаты:

thread | bytes | I/Os | MB/s | I/O per s | AvgLat | LatStdDev |
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
total: 786448384 | 96002 | 25.00 | 3199.98 | 168.717 | 321.889

Судя по мануалам к diskspd - отклик в 168 милисекунд это оч много.
25 янв 18, 17:59    [21139467]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
AngryError
В продолжение своего тернистого пути к матерому SQL-щику, еще 1 вопрос:
*предыстория*
Один из наших специалистов померял производительность дисковой подсистемы утилитой diskspd, и обнаружил, что при количестве потоков (threads), равным от 16 и выше - производительность снижается (что логично) до неприемлимого уровня (время отклика от 80 мс и выше).
Теперь он заявляет, что в связи с тем, что в нашей БД может работать от 20 до 30 человек одновременно + строются индексы + проходят бекапы логов, и т.д. - количество потоков в нашем случае может достигать 40-50 и более.
*предыстория закончена*
Количество пользователей, операции, и потоки IO никак не связаны.

AngryError
Мне бы понять, в чем затык, для начала.
Далее, непонятно, какой затык вы имели в виду? Жалобу пользователя?

AngryError
И сколько потоков оптимально выставить для теста, чтобы понять - беда со сторейджом или нет.

Сейчас ставлю тест 8КБ блоками в 32 потока (длина очереди - 16) без учета кешей системы на запись вот такие результаты:

thread | bytes | I/Os | MB/s | I/O per s | AvgLat | LatStdDev |
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
total: 786448384 | 96002 | 25.00 | 3199.98 | 168.717 | 321.889

Судя по мануалам к diskspd - отклик в 168 милисекунд это оч много.
Чтобы понять - беда со сторейджом или нет, в тесте diskspd (или лучше использовать sqlio) нужно ставить правильные параметры. Сиквел разве так с дисками работает? "8КБ блоками в 32 потока (длина очереди - 16) без учета кешей системы на запись"
25 янв 18, 18:52    [21139601]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
AngryError
Member

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

Если я ничего не перепутал:

Механизм упреждающего чтения позволяет компоненту Database Engine считывать из одного файла до 64 последовательных страниц (512 КБ)

При работе с журналом транзакций поддерживается до 32-х запросов ввода-вывода для 64-разрядной редакции сервера, с предельным размером запроса 3840KB

Т.е. мне нужно тестировать на запись блоки в 32-потока по 3840КБ и чтение по 512 КБ ?
25 янв 18, 19:30    [21139679]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
alexeyvg
Member

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

Если я ничего не перепутал:

Механизм упреждающего чтения позволяет компоненту Database Engine считывать из одного файла до 64 последовательных страниц (512 КБ)

При работе с журналом транзакций поддерживается до 32-х запросов ввода-вывода для 64-разрядной редакции сервера, с предельным размером запроса 3840KB

Т.е. мне нужно тестировать на запись блоки в 32-потока по 3840КБ и чтение по 512 КБ ?

Автор: Александр Гладченко. SQL Server: Методика тестирования дисковой подсистемы
25 янв 18, 20:06    [21139755]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
AngryError
Member

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

К сожалению, в статье не совсем понял, в чем разница между потоками, которые указываются в параметре -t и реальными потоками в SQL-сервере.
Единственная зацепка - автор говорит, что нет смысла ставить больше потоков, чем установлено процессорных ядер.
Получается, SQL генерирует потоки, ориентируясь на кол-во ядер?
26 янв 18, 12:35    [21141314]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
Гавриленко Сергей Алексеевич
Member

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

К сожалению, в статье не совсем понял, в чем разница между потоками, которые указываются в параметре -t и реальными потоками в SQL-сервере.
Единственная зацепка - автор говорит, что нет смысла ставить больше потоков, чем установлено процессорных ядер.
Получается, SQL генерирует потоки, ориентируясь на кол-во ядер?
Дались вам эти потоки. Какая вот разница, объясните мне, во сколько потоков данные будут попадать в очередь, если (условно говоря) контроллер будет эту очередь обрабатывать последовательно?

Основная претензия к многопоточному вводу-выводу была всегда в том, что он может превратить последовательный доступ к случайному. Но у вас же уже изначально случайный доступ. При чем тут потоки?

Сообщение было отредактировано: 26 янв 18, 12:48
26 янв 18, 12:46    [21141375]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
alexeyvg
Member

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

К сожалению, в статье не совсем понял, в чем разница между потоками, которые указываются в параметре -t и реальными потоками в SQL-сервере.
Единственная зацепка - автор говорит, что нет смысла ставить больше потоков, чем установлено процессорных ядер.
Получается, SQL генерирует потоки, ориентируясь на кол-во ядер?
Разумеется, если вы выполняете 10 запросов параллельно, то он не делает 10 потоков IO :-)

Сиквел отводит часть ядер под вычисления, часть под ввод-вывод, в том числе одновременно.
Система задания потоков IO там сложная, но разумеется, если вы выполняете 10 запросов параллельно, то он не делает 10 потоков запросов к диску :-)
Автор на основании своего опыта дал такую рекомендацию, я в общем с ней согласен...

Там ещё есть про типичный размер блока данных, и это 64 кб, а не 8, как у вас. Странное число, почему 8? Бывает 512 байт последовательно, для логов, 64 кб (рандом или последовательно) для страниц данных, 512 кб для бакапов и упреждающих чтений, но никак не 8.
26 янв 18, 14:13    [21141763]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
AngryError
Member

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

Видимо, я слишком большое значение им придал.
Сейчас протестировал дисковую подсистему: (16 потоков, очередь запросов - 8, 50% чтения 50% записи, рандом, блоки по 8КБ) получается в среднем 30 мб/сек. Такое норма для RAID10-массива из 14 FC дисков?

Обратил внимание, что в логах SQL-сервера пишутся записи от spid24s:
FlushCache: cleaned up 360072 bufs with 30026 writes in 99490 ms (avoided 93392 new dirty bufs) for db 5:0
average writes per second: 301.80 writes/sec
average throughput: 28.27 MB/sec, I/O saturation: 23377, context switches 35146

стоит ли обращать внимание на эти уведомления?
26 янв 18, 14:20    [21141800]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
AngryError
Member

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

Как раз в той статье, что вы привели.
В таблице с характеристиками для основных типов нагрузки ввода – вывода SQL Server, Файлы данных OLTP системы: 8КБ
Его и тестировал :)

Сильно запутался с этими IO-потоками. Как threads, указанные в diskspd (или sqlio) применяются в реальной жизни?
26 янв 18, 14:25    [21141827]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50778
AngryError
Как threads, указанные в diskspd (или sqlio) применяются в реальной жизни?

Никак.
26 янв 18, 14:30    [21141856]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
AngryError
Member

Откуда:
Сообщений: 44
Dimitry Sibiryakov,

Т.е. правильно будет тестировать дисковую систему, указывая 1 поток?
26 янв 18, 14:32    [21141867]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
AngryError
Member

Откуда:
Сообщений: 44
Был бы очень признателен, если бы кто-нибудь сформировал примерную строку параметров для теста диска с данными и диска с логами.
А то я что-то заплутал)
26 янв 18, 14:41    [21141919]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
AngryError
Сейчас протестировал дисковую подсистему: (16 потоков, очередь запросов - 8, 50% чтения 50% записи, рандом, блоки по 8КБ) получается в среднем 30 мб/сек. Такое норма для RAID10-массива из 14 FC дисков?
Да.

AngryError
Как раз в той статье, что вы привели.
В таблице с характеристиками для основных типов нагрузки ввода – вывода SQL Server, Файлы данных OLTP системы: 8КБ
Его и тестировал :)
В статье
Второй метрикой является производительность передачи данных, так называемый Traffic Throughput. Это основная метрика настоящей методики, поскольку большинству приложений баз данных характерны укрупнённые запросы (например, упреждающее чтение способно использовать запросы ввода-вывода в 64 и 128 КБ).

А 8 кб случайного доступа там конечно упоминается для OLTP, но это очень вырожденный случай. Типа террабйтная база, и выборка/апдэйт случайных коротких записей.

Типично будет последовательный доступ небольшими блоками для лога, + случайный либо последовательный доступ большими блоками для файлов данных.
Вот эти 2 нагрузки и тестируйте, отдельно на разные диски (ведь для этих файлов и будут разные диски, как рекомендовано?)

И ещё, обратите внимание на "Таблица 2. Характеристики для основных типов нагрузки ввода – вывода SQL Server", там всё это немного подробнее.

AngryError
Был бы очень признателен, если бы кто-нибудь сформировал примерную строку параметров для теста диска с данными и диска с логами.
Ээээ, в конце статьи zip-архив с командным файлом :-)
26 янв 18, 15:16    [21142099]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
AngryError
Member

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

К сожалению, этот файл (пример) уже удален с сервера.
А остальные параметры важны? Кол-во потоков, длина очереди, игнор буфера, размер тестируемого файла.
Файлы на разных дисках.
26 янв 18, 16:10    [21142271]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
AngryError
А остальные параметры важны? Кол-во потоков, длина очереди, игнор буфера, размер тестируемого файла.
Количество потоков для файла данных сделайте равным числу ядер, для лога - 1
размер файла - побольше, чтоб кэш не использовался
длинна очереди - лучше мерить с разными очередями, что бы увидеть пик пропускной способности и зависимость от глубины очереди.
Александр игнорирует буфер, что бы замерить именно чистую дисковую подсистему. Но этот подход многие считают неправильным.

В общем, что я хочу сказать - читайте всю статью, анализируйте, осмысливайте работу сиквела и параметры теста применительно к вашему софту и к бизнес-задачам - потому что нельзя заранее сказать, какие нужно задать, иначе бы это всё было встроено в сиквел и в какой то стандартный тест, или хотя бы в описании параметров SQLIO были бы указаны правильные параметры, которые нужно задавать всегда.
26 янв 18, 16:30    [21142326]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
архивариус
Member

Откуда:
Сообщений: 150
мысли вслух:

-h -L -d?(30-60 сек)

OLTP -b8K -r -w25
WH -b2M -w0 (If –r is used random tests are done, otherwise sequential tests are done)
LOG ?
tempdb ?

-t? (количество ядер CPU (всех или в нума ноде?) )

-o? (<= 2 * количество шпинделей )

1
2
26 янв 18, 16:31    [21142327]     Ответить | Цитировать Сообщить модератору
 Re: Потоки данных при работе SQL-сервера  [new]
AngryError
Member

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

Спасибо огромное за помощь! Думаю, дальше сам разберусь.
26 янв 18, 16:49    [21142366]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить