Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
AngryError Member Откуда: Сообщений: 50 |
И еще раз здравствуйте, знатоки! В продолжение своего тернистого пути к матерому SQL-щику, еще 1 вопрос: *предыстория* Один из наших специалистов померял производительность дисковой подсистемы утилитой diskspd, и обнаружил, что при количестве потоков (threads), равным от 16 и выше - производительность снижается (что логично) до неприемлимого уровня (время отклика от 80 мс и выше). Теперь он заявляет, что в связи с тем, что в нашей БД может работать от 20 до 30 человек одновременно + строются индексы + проходят бекапы логов, и т.д. - количество потоков в нашем случае может достигать 40-50 и более. *предыстория закончена* Собственно, вопрос: насколько я понимаю, пользователей БД нельзя считать как отдельные "потоки данных", которые указаны в утилите тестирования? Ведь поток то один (и вообще есть ли поток). Гугл сходу мне на этот вопрос не ответил, может подкинете мат.часть. Спасибо! |
25 янв 18, 14:37 [21138560] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37198 |
Время отклика не характеризует производительность, оно характеризует нагруженность. Производительность характеризуется показателями чтени/записи в период времени.
Сообщение было отредактировано: 25 янв 18, 14:54 |
25 янв 18, 14:53 [21138623] Ответить | Цитировать Сообщить модератору |
AngryError Member Откуда: Сообщений: 50 |
Гавриленко Сергей Алексеевич, Ок, нужно будет помониторить этот параметр. |
25 янв 18, 15:11 [21138682] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
Исходите из того, на что вы можете повлиять. На дисковую систему можете как-то влиять ? На объем памяти ? На SQL-код/бизнес-логику ? На кол-во юзеров ? |
25 янв 18, 16:02 [21138909] Ответить | Цитировать Сообщить модератору |
AngryError Member Откуда: Сообщений: 50 |
Мне бы понять, в чем затык, для начала. И сколько потоков оптимально выставить для теста, чтобы понять - беда со сторейджом или нет. Сейчас ставлю тест 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] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31813 |
|
||||||
25 янв 18, 18:52 [21139601] Ответить | Цитировать Сообщить модератору |
AngryError Member Откуда: Сообщений: 50 |
alexeyvg, Если я ничего не перепутал: Механизм упреждающего чтения позволяет компоненту Database Engine считывать из одного файла до 64 последовательных страниц (512 КБ) При работе с журналом транзакций поддерживается до 32-х запросов ввода-вывода для 64-разрядной редакции сервера, с предельным размером запроса 3840KB Т.е. мне нужно тестировать на запись блоки в 32-потока по 3840КБ и чтение по 512 КБ ? |
25 янв 18, 19:30 [21139679] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31813 |
Автор: Александр Гладченко. SQL Server: Методика тестирования дисковой подсистемы |
||
25 янв 18, 20:06 [21139755] Ответить | Цитировать Сообщить модератору |
AngryError Member Откуда: Сообщений: 50 |
alexeyvg, К сожалению, в статье не совсем понял, в чем разница между потоками, которые указываются в параметре -t и реальными потоками в SQL-сервере. Единственная зацепка - автор говорит, что нет смысла ставить больше потоков, чем установлено процессорных ядер. Получается, SQL генерирует потоки, ориентируясь на кол-во ядер? |
26 янв 18, 12:35 [21141314] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37198 |
Основная претензия к многопоточному вводу-выводу была всегда в том, что он может превратить последовательный доступ к случайному. Но у вас же уже изначально случайный доступ. При чем тут потоки? Сообщение было отредактировано: 26 янв 18, 12:48 |
||
26 янв 18, 12:46 [21141375] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31813 |
Сиквел отводит часть ядер под вычисления, часть под ввод-вывод, в том числе одновременно. Система задания потоков IO там сложная, но разумеется, если вы выполняете 10 запросов параллельно, то он не делает 10 потоков запросов к диску :-) Автор на основании своего опыта дал такую рекомендацию, я в общем с ней согласен... Там ещё есть про типичный размер блока данных, и это 64 кб, а не 8, как у вас. Странное число, почему 8? Бывает 512 байт последовательно, для логов, 64 кб (рандом или последовательно) для страниц данных, 512 кб для бакапов и упреждающих чтений, но никак не 8. |
||
26 янв 18, 14:13 [21141763] Ответить | Цитировать Сообщить модератору |
AngryError Member Откуда: Сообщений: 50 |
Гавриленко Сергей Алексеевич, Видимо, я слишком большое значение им придал. Сейчас протестировал дисковую подсистему: (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] Ответить | Цитировать Сообщить модератору |
AngryError Member Откуда: Сообщений: 50 |
alexeyvg, Как раз в той статье, что вы привели. В таблице с характеристиками для основных типов нагрузки ввода – вывода SQL Server, Файлы данных OLTP системы: 8КБ Его и тестировал :) Сильно запутался с этими IO-потоками. Как threads, указанные в diskspd (или sqlio) применяются в реальной жизни? |
26 янв 18, 14:25 [21141827] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52881 |
Никак. |
||
26 янв 18, 14:30 [21141856] Ответить | Цитировать Сообщить модератору |
AngryError Member Откуда: Сообщений: 50 |
Dimitry Sibiryakov, Т.е. правильно будет тестировать дисковую систему, указывая 1 поток? |
26 янв 18, 14:32 [21141867] Ответить | Цитировать Сообщить модератору |
AngryError Member Откуда: Сообщений: 50 |
Был бы очень признателен, если бы кто-нибудь сформировал примерную строку параметров для теста диска с данными и диска с логами. А то я что-то заплутал) |
26 янв 18, 14:41 [21141919] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31813 |
А 8 кб случайного доступа там конечно упоминается для OLTP, но это очень вырожденный случай. Типа террабйтная база, и выборка/апдэйт случайных коротких записей. Типично будет последовательный доступ небольшими блоками для лога, + случайный либо последовательный доступ большими блоками для файлов данных. Вот эти 2 нагрузки и тестируйте, отдельно на разные диски (ведь для этих файлов и будут разные диски, как рекомендовано?) И ещё, обратите внимание на "Таблица 2. Характеристики для основных типов нагрузки ввода – вывода SQL Server", там всё это немного подробнее.
|
||||||||
26 янв 18, 15:16 [21142099] Ответить | Цитировать Сообщить модератору |
AngryError Member Откуда: Сообщений: 50 |
alexeyvg, К сожалению, этот файл (пример) уже удален с сервера. А остальные параметры важны? Кол-во потоков, длина очереди, игнор буфера, размер тестируемого файла. Файлы на разных дисках. |
26 янв 18, 16:10 [21142271] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31813 |
размер файла - побольше, чтоб кэш не использовался длинна очереди - лучше мерить с разными очередями, что бы увидеть пик пропускной способности и зависимость от глубины очереди. Александр игнорирует буфер, что бы замерить именно чистую дисковую подсистему. Но этот подход многие считают неправильным. В общем, что я хочу сказать - читайте всю статью, анализируйте, осмысливайте работу сиквела и параметры теста применительно к вашему софту и к бизнес-задачам - потому что нельзя заранее сказать, какие нужно задать, иначе бы это всё было встроено в сиквел и в какой то стандартный тест, или хотя бы в описании параметров SQLIO были бы указаны правильные параметры, которые нужно задавать всегда. |
||
26 янв 18, 16:30 [21142326] Ответить | Цитировать Сообщить модератору |
архивариус Member Откуда: Сообщений: 162 |
мысли вслух: -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] Ответить | Цитировать Сообщить модератору |
AngryError Member Откуда: Сообщений: 50 |
alexeyvg, Спасибо огромное за помощь! Думаю, дальше сам разберусь. |
26 янв 18, 16:49 [21142366] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |