#sql #cpu #scheduler #busy-waiting #bottleneck
Вопрос:
У нас есть виртуальная машина, в которой находится SQL server. Виртуальная машина имеет 36 ядер, где SQL Server потребляет 24 ядра (из-за ограничения выпуска Вот некоторые показатели, которые были зафиксированы и в которых у нас есть вопрос.
Общая загрузка ЦП общая , пользовательская и привилегированная
Общая загрузка процессора процессом SQL server (SQL server имеет 24 видимых онлайн-планировщика, поэтому 2400% — это максимум, который может потреблять сервер )
Таким образом, мы видим, что SQL server не потребляет 100% ресурсов процессора.
Когда рабочий поток SQL server исчерпает его на 4 мс, он попадет в очередь запуска, и SQL server зарегистрирует ожидания SOS_SCHEDULER_YIELD, а также время ожидания сигнала его регистра ( рабочий поток находится в очереди ожидания процессора ). В моем понимании, когда на сервере выполняется большое количество рабочих потоков с назначенной задачей, они часто попадают в очередь для выполнения, а нагрузка на процессор высока, потому что он должен выполнять постоянную работу, и время сигнала будет расти.
Вот показатели ожидания для SOS_SCHEDULER_YIELD
Таким образом, в течение 30 минут у нас есть 700 минут времени ожидания SOS_SCHEDULER_YIELD со 100% временем ожидания = 100% временем ожидания сигнала — шаблон, когда процессор становится узким местом, но загрузка процессора невелика. Почему это происходит ? Это нормальное поведение ? Это нормальная ситуация, что у нас есть такие показатели ?