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

Откуда:
Сообщений: 20
Добрый день! Я не являюсь экспертом в MS SQL Server.
Есть задача работать с SQL Server 2016, установил редакцию SQL Server 2016 Developer для разработки и тестирования. Но я не особо знаком со всей "экосистемой" этого сервера.

Есть такая проблема: Сервер работает на компьютере разработчика, в режиме простоя (своего) периодически начинает выполнять какие-то задачи. Т.е. к нему нет явных обращений с моей стороны. Сервер не на "боевой" машине.
Возможно по умолчанию при создании БД включаются какие-то оптимизации по расписанию?

Заметил что иногда сервер начинает загружать процессор, если выполняется другая активная задача в Visual Studio 2015. Еще, если мало свободной памяти. Например при поиске информации в Chrome, последний с множеством открытых вкладок съедает много памяти. Может совпадения или причина мной не понята. Сервер установлен и создана тестовая БД практически "по умолчанию".
Хотя она заполнена данными, и в схеме есть индексы. Если это важно. Вообще ощущение что это связано с нехваткой памяти.

Был установлен SQL Server Data Tools for Visual Studio 2015 (SSDT). Возможно это также важно. Удалил я его потому как именно с него началась загрузка процессора SQL сервером. Это происходило при запуске проекта в Visual Studio, даже не связанного с БД. Такое ощущение что плагин автоматом пытался подключиться к SQL серверу при запуске студии и что-то там делал. Вначале я удалил SQL Server 2016 Express LocalDB, который был установлен вместе с SSDT. Удалил потому что его полностью заменяет Server 2016 Developer. Судя по сообщениям удалились не все компоненты. SSDT для меня немного удобнее чем SSMS, но решил удалить SSDT полностью. Но проблема все равно всплыла.

SQL Server Profiler не показывает какие-либо обращения к БД во время загрузки процессора.

Вроде как процесс сервера не делает каких-либо сетевых операций. И не пишет на диск. Просто грузит проц. Поток который это делает выполняет код из sqldk.dll. Стек вызовов в конце может быть например такой:
->ntoskrnl.exe!KeWaitForSingleObject
->ntoskrnl.exe!KeWaitForMultipleObjects
->ntoskrnl.exe!MmUnlockPages

Подскажите куда копать, ясно что причин может быть множество. Отключить какие-либо оптимизации по расписанию? Указать больше памяти или наоборот в настройках? Подскажите какой-либо монитор внутренних процессов? Плагин Visual Studio некорректно работает совместно с сервером? Может новомодные сервисы телеметрии в Windows что-то делают?
Я не прошу включать телепаты, возможно проблема известна для опытных разработчиков и решение простое. Заранее спасибо.

Конфигурация:
Windows 10 64 bit
SQL Server 2016 Developer
Visual Studio 2015 Update 3
SSMS - SQL Server 2016 Management Studio (16.5.3 версия вроде как)
Был установлен SSDT - SQL Server Data Tools for Visual Studio 2015 - Удалил
Средства для разработчиков из пакета сервера
MS ODBC Driver 13 for SQL Server
15 фев 17, 11:44    [20213304]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Апдейтит статистику ?
15 фев 17, 11:59    [20213379]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
o-o
Guest
Ruzzz
Возможно по умолчанию при создании БД включаются какие-то оптимизации по расписанию?

при создании базы ничего само собой нигде не включается.
более того, в том же экспрессе нет агента (он задизэйблен),
соответственно, никаких расписаний вообще быть не может
15 фев 17, 12:19    [20213493]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3732
o-o
Ruzzz
Возможно по умолчанию при создании БД включаются какие-то оптимизации по расписанию?

при создании базы ничего само собой нигде не включается.
более того, в том же экспрессе нет агента (он задизэйблен),
соответственно, никаких расписаний вообще быть не может


у тс вроде как Developer
15 фев 17, 12:25    [20213508]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
o-o
Guest
да хоть 100 раз энтерпрайз.
никакой сервер сам себе заданий не создает
15 фев 17, 12:28    [20213521]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
У меня ничего такого не делает сам по себе.
15 фев 17, 12:57    [20213696]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3732
o-o
да хоть 100 раз энтерпрайз.
никакой сервер сам себе заданий не создает


тут ты прав, спора нет ;-)
15 фев 17, 14:30    [20214258]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Ruzzz
Member

Откуда:
Сообщений: 20
У меня также сложилось впечатление что ситуация немного не стандартная. Так как перед тем как задать здесь свой вопрос, постарался его хорошенько погуглить, на сколько смог придумать ключевые фразы.

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

Я сделал такой эксперимент:
1) Запустил сервер - все ок
2) Открыл вкладку мониторинга процесса сервера в программе Process Hacker
3) Запустил браузер Хром и зашел на Ютуб, где начал открывать множество видео роликов и ставить на паузу. Все вкладки Ютубу в отдельном окне.

Вот смотрите на такие картинки:
http://imgur.com/a/La0oI
http://imgur.com/a/GvDC4

Это мониторинг процесса сервера в Process Hacker.
1) Красными кружками обозначены моменты открытия вкладок внутри Хрома. Не на все новые вкладки "реагирует сервер". Возможно важно что Хром создает новый процесс для новой вкладки.
2) Синие цифры 1 и 2 это моменты 1) когда я начинаю быстро открывать очень много вкладок на Ютубе просто кликая колесом мышки в Хроме 2) Я закрываю окно Хрома со всеми вкладками Ютуба, резко освобождается много памяти. Уточню, что сам Хром еще запущен, есть другие окна.

---

Думаю проблема проявляется когда память сервера начинает уходить в своп. Понятно что причина может быть комплексной: конфигурация железа, программного обеспечения, настройки сервера, настройки БД. Но хотелось бы решить вот что: сервер мне нужен для разработки и тестирования, мне не нужна его "гарантированная эффективная бесперебойная" работа. И у меня нет возможности поставить сервер на отдельную машину или увеличивать память текущей. Подскажите возможные решения? Может есть возможность успокоить сервер ) ?
15 фев 17, 14:51    [20214335]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Не туда вы смотрите. Надо просто открыть список активных сессий, и посмотреть, что выполняется на сервере в момент, когда он утилизирует процессор.
15 фев 17, 14:55    [20214351]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Ruzzz
Member

Откуда:
Сообщений: 20
Добавлю, что память забита почти всегда, иначе никак, так как это рабочая машина с постоянно запущенными средствами разработки и другими "тяжелыми" программами. Плюс SSD делает незаметным использование своп файла. Такое поведение SQL Server'а немного мешает, так как отжирает до 40% процессора. На данный момент просто включаю сервер когда он нужен. Но это неудобно.
15 фев 17, 14:59    [20214362]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Ruzzz,

select SUBSTRING(text, (statement_start_offset/2)+1,
	((CASE statement_end_offset
	WHEN -1 THEN DATALENGTH(text)
	ELSE statement_end_offset
	END - statement_start_offset)/2) + 1) AS statement_text,* 
from sys.dm_exec_requests ec
CROSS  APPLY master.sys.dm_exec_sql_text(ec.sql_handle) AS s 

результат в студию

размер используемой сервером памяти настроен или пущено на самотек?
15 фев 17, 16:06    [20214628]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Ruzzz
Member

Откуда:
Сообщений: 20
Протестировал вот такой программой:
int main()
{
    const size_t BUFFER_SIZE = 1024 * 1024 * 1024;
    uint8_t *buffer;
    do
    {
        std::cout << "Press ENTER key to allocate memory.\n";
        std::cin.get();
        buffer = new (std::nothrow) uint8_t[BUFFER_SIZE];
        if (buffer)
        {
            std::cout << "Write to allocated memory..\n";
            for (size_t i = 0; i < BUFFER_SIZE; i += 64)
                buffer[i] = static_cast<uint8_t>(rand() / 256);
        }
        else
            std::cout << "ERROR\n";
    } while (true);
	return 0;
}


Каждый раз после нажатия Enter программа выделяет 1 GB и пишет рандомные числа, если система выделила еще один GB.
Этого достаточно чтобы мой экземпляр SQL Server'a начал грузит проц.

https://dl.dropboxusercontent.com/u/115646/Dev/alloc1gb.7z
15 фев 17, 16:10    [20214644]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Ruzzz
Протестировал вот такой программой:
int main()
{
    const size_t BUFFER_SIZE = 1024 * 1024 * 1024;
    uint8_t *buffer;
    do
    {
        std::cout << "Press ENTER key to allocate memory.\n";
        std::cin.get();
        buffer = new (std::nothrow) uint8_t[BUFFER_SIZE];
        if (buffer)
        {
            std::cout << "Write to allocated memory..\n";
            for (size_t i = 0; i < BUFFER_SIZE; i += 64)
                buffer[i] = static_cast<uint8_t>(rand() / 256);
        }
        else
            std::cout << "ERROR\n";
    } while (true);
	return 0;
}


Каждый раз после нажатия Enter программа выделяет 1 GB и пишет рандомные числа, если система выделила еще один GB.
Этого достаточно чтобы мой экземпляр SQL Server'a начал грузит проц.

https://dl.dropboxusercontent.com/u/115646/Dev/alloc1gb.7z


Типа чукча писатель, чукча не читатель?
вы бы еще калькулятор заюзали чтобы скуль проверить, предалагаю МК-61 как наиболее продвинутый.
15 фев 17, 16:18    [20214680]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Ruzzz
Member

Откуда:
Сообщений: 20
WarAnt,
Ваше сообщение увидел после.
Вот результат запроса в SSMS как csv с разделителем ';'. Форумный движок позволяет вставить CSV но пишет что разделитель должен быть запятая, ну его экранировать, как оно тут у вас принято не знаю, так что так.
Делал три запроса, до (1-я строка результата), во время загрузки проца (2-я строка) и после (3-я строка):
https://dl.dropboxusercontent.com/u/115646/Temp/sql_servr_2016_diag.csv
15 фев 17, 16:37    [20214774]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Ruzzz
Member

Откуда:
Сообщений: 20
По поводу используемой сервером памяти - не помню, наверное пущено на самотек, а может что-то указывал.
15 фев 17, 16:39    [20214789]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Ruzzz
Думаю проблема проявляется когда память сервера начинает уходить в своп.
Сервер боится свопа и избегает его всеми доступными способами, в том числе освобождает и возвращает операционной системе память в случае ее нехватки. На это вполне может тратиться процессор. Ограничьте сервер по памяти, не создавайте для него memory pressure, и, возможно, проблема уйдет.
15 фев 17, 16:42    [20214806]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
invm
Member

Откуда: Москва
Сообщений: 9396
Ruzzz,

Посмотрите таки уже кто ест CPU:
select cpu_time, * from sys.dm_exec_sessions where status = 'RUNNING' order by cpu_time desc;
15 фев 17, 16:45    [20214823]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Ruzzz
Member

Откуда:
Сообщений: 20
invm,
+
session_idlogin_timehost_nameprogram_namehost_process_idclient_versionclient_interface_namesecurity_idlogin_nament_domainnt_user_namestatuscontext_infocpu_timememory_usagetotal_scheduled_timetotal_elapsed_timeendpoint_idlast_request_start_timelast_request_end_timereadswriteslogical_readsis_user_processtext_sizelanguagedate_formatdate_firstquoted_identifierarithabortansi_null_dflt_onansi_defaultsansi_warningsansi_paddingansi_nullsconcat_null_yields_nulltransaction_isolation_levellock_timeoutdeadlock_priorityrow_countprev_errororiginal_security_idoriginal_login_namelast_successful_logonlast_unsuccessful_logonunsuccessful_logonsgroup_iddatabase_idauthenticating_database_idopen_transaction_count
532017-02-15 15:56:06.443DESKTOP-34KNUQUMicrosoft SQL Server Management Studio - Query99527.Net SqlClient Data Provider0x010500000000000515000000683D2B0F73E8A0D179E98FBDE9030000DESKTOP-34KNUQU\UserDESKTOP-34KNUQUUserrunning0x15319575832017-02-15 15:59:27.3402017-02-15 15:59:27.34034064412147483647us_englishmdy7111011112-10100x010500000000000515000000683D2B0F73E8A0D179E98FBDE9030000DESKTOP-34KNUQU\UserNULLNULLNULL2110

Запустил консольную прогу, что выше, добился загрузки проца.
Запрос сделал с помощью SQL Server Management Studio.
15 фев 17, 17:04    [20214928]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Ruzzz
Member

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

Сейчас указал лимит памяти, но это не решает проблему, да и логично. У меня БД не большая, проблема здесь не в том что сервер начинал кушать много памяти, а в том что он не может работать нормально, если его страницы памяти идут в файл подкачки. Насколько я понял.

Похоже это специфика сервера, и сидеть тихо при забитой памяти он не может. Вообще конечно жаль. Для разработки было бы удобно. Буду значит старт/стоп сервера делать.
15 фев 17, 17:11    [20214963]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
WarAnt
Member

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

Сейчас указал лимит памяти, но это не решает проблему, да и логично. У меня БД не большая, проблема здесь не в том что сервер начинал кушать много памяти, а в том что он не может работать нормально, если его страницы памяти идут в файл подкачки. Насколько я понял.

Похоже это специфика сервера, и сидеть тихо при забитой памяти он не может. Вообще конечно жаль. Для разработки было бы удобно. Буду значит старт/стоп сервера делать.


вы чего то не договариваете.
У меня одновременно запущено 4-6 разных студий и крутится 3 версии сиквела на рабочем компе, и никаких проблем с загрузкой нет.
Ищите что делает сиквел, запустите например программу sqlutil или любую другую подобную и смотрите в онлайне что происходит на сервере когда процц отъедается.
15 фев 17, 18:02    [20215124]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Там какой-нибудь вирусяка, который брутфорсит сервер.
15 фев 17, 18:12    [20215142]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Ruzzz
Member

Откуда:
Сообщений: 20
WarAnt,
Так я на форум и пришел, чтобы узнать что мне договаривать нужно )

sqlutil запустил, он показывает некую статистику по указанной БД, я так понял, не для всего сервера. При выборе моей БД он говорит об ошибке, нет какой-то колонки. Возможно при создании БД я указал не вести лог или еще что-то. По другим, системным БД - он просто молчит, потом отваливается connection.

А что по поводу вашего запроса, данные ничего интересного не могут подсказать?

Владислав Колосов,
Да нет вроде вирусов, думал и об этом. Да и странно как-то, пока в своп память не уходит, то и брутфорса нет получается, потому как проц не грузит вообще.
15 фев 17, 20:45    [20215467]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
Ruzzz
Member

Откуда:
Сообщений: 20
Похоже это моя ситуация http://rsdn.org/forum/db/6606382.1
Изменил нижний порог лимита памяти с нуля и вроде как полет нормальный.
Получается проблему я диагностировал правильно, а по ссылке дают объяснение и простое, но рабочее решение.
Еще интересная ссылка https://learningintheopen.org/tag/preemptive_xe_callbackexecute/
Вопрос думаю решен.
Всем спасибо за компанию.
15 фев 17, 21:43    [20215586]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Версию SQL Server 2016 можно узнать?

SELECT @@version

Если SP1 не стоит, то попробуйте отключить:

SELECT 'ALTER DATABASE ' + QUOTENAME([name]) + ' SET QUERY_STORE = OFF'
FROM sys.databases
WHERE is_query_store_on = 1

Мне в свое время помогло решить похожие проблемы как у Вас.
17 фев 17, 17:40    [20222308]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2016 Developer грузит процессор до 40% в простое  [new]
juwdoks
Member

Откуда:
Сообщений: 144
я решил такую проблему на виртуалке ruvds установкой sp1
21 фев 17, 01:23    [20231305]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить