380 likes | 972 Views
SQL 2005 и SQL 2008. Методики оптимизации ожидания ресурсов (SQL Server Waits) в аналитических системах. Дмитрий Артемов dimaa@microsoft.com. Документация так себе. Что такое ожидание ?. Мы создали их для помощи в поиске проблем
E N D
SQL 2005 и SQL 2008 Методики оптимизации ожидания ресурсов (SQL Server Waits) в аналитических системах Дмитрий Артемов dimaa@microsoft.com
Документация так себе Что такое ожидание? • Мы создали их для помощи в поиске проблем • Там, давным давно (SQL 4.2) у нас были блокировки, сеть и операции ввода/вывода • Но со временем мы малость увлеклись • Имя ожидания – на усмотрение разработчика
Обычное дело для SELECT Мы знаем,что придется ждать Пример Понимает механику диспетчера SQLOS Ожиданиеприводит к вызову SignalObjectAndWait() В итоге все сводится к вызову WaitForSingleObject() илиSignalObjectAndWait() • SOS_EventAuto– «обертка» для объекта Windows Kernel Event
Кооперативная многозадачность SQL Server • Voluntary switching is roughly equivalent to a thread ordering an item that isn't ready to go at a fast-food counter. Rather than hold up the queue of the other diners, the thread will step aside and let the next thread place its order (execute its routine) while the first thread's hamburger is being prepared. When the hamburger is ready, the first thread goes to the end of the ready queue of the priority level.«Inside Microsoft Windows 2000» David A. Solomon, Mark Russinovich • UMS implements a cooperative model. UMS relies on threads to voluntarily yield. UMS takes the approach it does in order to keep from involving the Windows kernel any more than absolutely necessary. In a system where worker threads can be counted on to yield when they should, a cooperative scheduler can actually be more efficient than a preemptive one because the scheduling process can be tailored to the specific needs of the application. UMS knows SQL Server's scheduling needs better than the operating system can be expected to.«The Guru's Guide to SQL Server Architecture and Internals» By Ken Henderson
Как увидеть ожидания? Историческая статистика «Живая» информация Обломки прошлого Трассировка в SQL2008 Инструменты Счетчик Wait Statistics select er.session_id, er.wait_type from sys.dm_exec_requestser join sys.dm_exec_sessionses on er.session_id=es.session_id where es.is_user_process = 1 –-для выделения пользовательских процессов -- в sql server 2000 они всегда были SPID < 51, теперь могут быть любыми
Sysprocesses – нужно или нет? • Показывает открытые транзакции в неактивных потоках • К тому же Sysprocessesпоказывает несколько строк для параллельных запросов • Однако можно сделать sys.dm_exec_requests join sys.dm_os_tasks
Частые типы ожиданий Блокировки (механизм синхронизации) BUF latch - синхронизация Намек: Системная таблица или аллокация Намек: Ваше приложение Намек: задержка I/O Ресурс В сумме ~50 типов ожидания Намек: Сеть или ваше приложение
Некоторые типы не сигнализируют о проблемах Следовало бы назвать «ожидания нет» BOL называет их Queue Waits Нормально для SQL CLR
CXPACKET – миф и реальность Чаще всего встречается в DW и DSS типахприложений Sync Не торопитесь с выводами
CXPACKET • Параллелизм реализуется на уровне компонентов запроса В системе 2 процессора!
Пара слов про параллелизм • SQL Server способен выполнять запрос сразу на нескольких процессорах • Для большинства крупных запросов параллелизм обеспечивает почти линейное масштабирование • Однако, использование параллелизма увеличивает накладные расходы на исполнение запроса • Обычно параллелизм полезен в ситуации с относительно небольшим числом конкурентных запросов
Еще пара слов про пара… • SQL Server строит параллельные планы горизонтально разделяя входные данные на примерно равные наборы • Каждый кусок назначается своему CPU • А затем производится выполнение одинаковых операций (агрегирование, соединение, …) на каждом куске
non BUFFER Latch Sync Latch class Те же режимы как и для работы с буфером (KP, SH, UP, EX, DT)
FGCB_ADD_REMOVE latch Sync SQL Server Engine INSERT “Нужно приращение” LATCH_EX: FGCB_ADD_REMOVE Нужно место mydb.mdf INSERT Нужно место FGCB Autogrow Нужно место INSERT Мораль: Используйте «Instant file initialization»но… оно не работает для журнала Нужно место INSERT Нужно оценить свободное место LATCH_SH: FGCB_ADD_REMOVE
SOS_SCHEDULER_YIELD Forced I/O, Lock, Latch ************************ * * BEGIN STACK DUMP: * 10/17/09 15:51:52 spid 0 * * Non-yielding Scheduler * ************************ Может быть preemptive поток
Resource THREADPOOL Применим к любой задаче TDS Login Если ждали слишком долго 10 сек по умолчанию - Login Timeout Request = task + worker
Как насчет ожиданий на I/O Sync Log Writer COMMIT TRAN Запись Log Buffer WRITELOG Mylog.ldf Log Cache Log Buffer INSERT LOGBUFFER Запрос на Log Buffer Все буферы заняты Copy model Resource Mylog.ldf и .mdf SQLTrace File Resource IO_COMPLETION Page I/O Sort I/O DISKIO_SUSPEND File VDI App Создание файлов БД Engine Workers ASYNC_IO_COMPLETION BACKUP WITH SNAPSHOT Zero Log Files Backup media Sync Resource
Запросы, память и RESOURCE semaphore Hash и sort Resource sys.dm_os_memory_brokers DBCC MEMORYSTATUS компиляции С появлением в SQL 2005 брокеров, управляющих распределением памяти, кеш запросов и кеш компиляций стали конкурентами
Pre-emptive Waits External Код может быть сложнее чем просто API вызов ************************ * * BEGIN STACK DUMP: * 10/17/09 15:51:52 spid 0 * * Non-yielding Scheduler * ************************
Что можно увидеть? ~190 типов
Почему плохо использовать Profiler через GUI? • Потому что он вызывает внешние компоненты • Потому что процессоры занимаются в основном переключением контекста, а рабочие процессы сидят на ожидании TRACEWRITE
Расширенные события и ожидания См. dm_xe_map_values Начало и окончание Duration, Total, Max
Есть и другие “ожидания” “Почему не урезается журнал” Плохо написанная DLL PRECONNECT статус Ручное управление backoffsвsys.dm_os_spinlock_stats
Огласите весь список, пожалуйста! • См заголовочный файл в исходниках • Нет исходников? См. sys.dm_xe_map_valuesдля SQL Server 2008 • Список в документации (http://msdn.microsoft.com/en-us/library/ms179984.aspx) • KB 822101только протипы для SQL 2000 и раньше The Wait Type Repository Blog • Развитие Repository • Новые «открытия» • Комментарии • Использовать блог для обновления BOL • Размещение в блоге сценариев и доп. информации
What does MDW tell you about I/O Waits sync reads, sorts, SQLTrace I/O, load CLR assembly Buffer Pool I/O for pages Backups, Recovery, DBM WRITELOG wait time = Log Flush Wait (perfmon) LOGBUFFER is just waiting on folks waiting on WRITELOG MDW - Management Data Warehouse
The mapping has changed KB 822101 wrong for 2005 and 2008
What’s About These? Forced Resource External Sync Hot stored proc in SQL Server 2005
Прошу вас заполнить форму с оценкой сессии!
Официальные курсы и сертификация Microsoft • Более 300 официальных курсов Microsoft доступно в России. • Официальные курсы можно прослушать только в авторизованных учебных центрах Microsoft • под руководством опытного сертифицированного инструктора Microsoft • интенсивное обучение с акцентом на практику • более 80-и учебных центров более чем в 20-и городах России (+ дистанционные и выездные курсы) • Сертификат Microsoft - показатель квалификации ИТ-специалиста для работодателя . • Microsoft предлагает гибкую систему сертификаций. • Все курсы, учебные центры и центры тестирования: www.microsoft.com/rus/learning 40 57 % % Доказательство № 75 Доказательство № 119 • рекрутеров считают сертификацию сотрудников одним из критериев для повышения в должности • сертифицированных специалистов считают, что сертификация помогла им получить работу или повышение
Специальные предложения • Сертификационный пакет со вторым шансом • Пакеты экзаменационных ваучеров со скидкой от 15 до 20% и бесплатной пересдачей («вторым шансом»). Все экзамены сдаются одним человеком. • Сэкономьте 15% на сертификации вашей ИТ-команды • Пакет из 10-и экзаменационных ваучеров со скидкой 15% для сотрудников ИТ-отдела. «Второй шанс» включен. Ваучеры можно произвольно распределять между сотрудниками. • Microsoft Certified Career Conference • Первая 24-часовая глобальная виртуальная конференция с 18 ноября с 15.00 (моск. время) по 19 ноября 2010 г. • Сессии по технологиям и построению карьеры • Скидка 50% для сертифицированных специалистов Microsoft и студентов • Бесплатная подписка на TechNet для слушателей официальных курсов • Некоторые курсы по SharePoint, Windows 7; WindowsServer 2008; SQL Server 2008 • Детали: www.microsoft.com/rus/learning С 22 ноября 2010 г. – подписка TechNet бесплатно для слушателей курсов. Количество ограничено!
Спасибо! Вопросы?