Sql server windows nt 64 bit грузит процессор

  • Remove From My Forums

 locked

SCCM — SQL Server Windows NT 64 Bit — High CPU Usage

  • Question

  • I am experiencing an issue with SCCM and SQL. We first noticed that our SCCM console was running extremely slow. After connecting to the server to investigate, I noticed that the process SQL Server Windows NT — 64 Bit was consistently maxing out the CPU
    usage.

    This is a fairly new server, I set it up probably 6 months ago. It has been functioning flawlessly while I was still in the setup stage. I have been the only one on my team utilizing it until recently when I finally had time to start migrating our clients
    to it. I followed the guide at this link in order to setup the SQL server and fine
    tune it, so I thought the server would run fairly smooth. I have set the minimum and maximum memory limits based off the spreadsheet recommended in that link.

    Now I’ve noticed that the CPU usage will idle out to the point it is no longer an issue. But as soon as anyone tries to use the SCCM Console it shoots right back up. This seems kind of ridiculous, but I have allowed the process to idle down and browsed to
    a different menu in my console, to watch it spike right back up too many times to count.

    Any ideas on how to troubleshoot this?

sql server windows nt грузит проц ☑ 0

razerw

20.06.17

10:17

Добрый день, win ser 2012, mssql 2012

служба sql server windows nt  Нагружает процессор до 70 %  и такая нагрузка бывает длиться по 15 минут.

в этот период времени у пользователей бывает вышибает программу 1с.

подскажите как проверить? какой запрос съедает ресурсы ЦП?

1

Господин ПЖ

20.06.17

10:20

в managent studio смотреть по duration

2

rphosts

20.06.17

10:35

(1) +1

в эвентах профайлера.

3

vicof

20.06.17

10:37

4

razerw

20.06.17

10:38

(2) подскажите как туда зайти

5

Господин ПЖ

20.06.17

10:39

мля…

6

razerw

20.06.17

10:40

я в актив мониторе смотрю

7

pessimist

20.06.17

10:51

(0) Это вам повезло.

Ясно чего системе не хватает. Нужно больше процессоров. Теоретически вы можете попробовать понять почему оно грузит процессор. А практически для небольших организаций дать системе больше ядер дешевле чем разбираться.

Намного дороже по деньгам ситуация когда 1С тормозит а на сервере ничего не загружено, ни процессор, ни диск, ни память.

8

razerw

20.06.17

10:53

Так дело в том что все было хорошо, и тут на тебе висяки пошли.

9

razerw

20.06.17

10:58

Что в трассировках я должен увидеть? как мне понять что именно грузит проц?

10

H A D G E H O G s

20.06.17

11:29

(9) Это эвристический, а не имперический процесс.

11

H A D G E H O G s

20.06.17

11:30

Мдать, я охеренен

12

Господин ПЖ

20.06.17

11:42

(10) послал так послал

13

Fragster

20.06.17

11:45

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

вообще это может быть что-то типа «анализ субконто» за весь период без отборов

14

Fragster

20.06.17

11:47

если это 1с, то, опять же, можно посмотреть в консоли 1с у кого из юзеров сейчас большое «время вызова СУББ текущее», подойти и ненавязчиво поинтересоваться, что же он такое запустил…

15

Господин ПЖ

20.06.17

11:48

>какой запрос съедает ресурсы ЦП?

>как мне понять что именно грузит проц?

как это в одной голове уживается. полушария живут отдельно друг от друга?

16

ansh15

20.06.17

11:53

(0) Что за процессор и сколько пользователей?

17

Bigbro

20.06.17

11:57

я бы предложил ребилд индексов или хотя бы обновление статистики сделать.

проверить модель восстановления БД, может какой то гений full поставил и теперь там лог в 10 раз больше базы.

18

Одинесю

20.06.17

11:58

Да просто стоит регламентное задание какое-то.

19

Bigbro

20.06.17

12:00

когда скуль нормально настроен регламентные его так не насилуют обычно. скорее всего что то в конфигурации сервера/бд напутано.

20

Господин ПЖ

20.06.17

12:14

>может какой то гений full поставил и теперь там лог в 10 раз больше базы

ну и что

>я бы предложил ребилд индексов или хотя бы обновление статистики сделать.

есть повод выбрасывать скомпилированные планы выполнения?

21

rphosts

20.06.17

12:45

(7) с такими вопросами овер 90% что не в проце дело а базу давно пора обслужить

22

Cyberhawk

22.06.17

13:07

Что-то не ясно, почему в (10) противопоставление: эмпирический — основанный на опыте. Эвристический — наверное, имелось в виду, что нужно чутье. Одно другому не противоречит же — нужно применять чутье во время опыта.

I am facing a strange behavior of my SQL Server 2016 web edition. SQL Server Windows NT 64 bit suddenly jump to use 90% of the CPU and then it goes down after 5 sec, then the spike comes again after 3 to 5 mins (normal usage is just aroud 2% to 5% of cpu)

My server specs

  • Windows Server 2012 R2 Standard Evaluation (9600 build)
  • MS SQL Server 2016 Web
  • Intel Xeon E3-1245v5
  • 64GB DDR4 ECC (2400 MHz)
  • 3×480 GB SSD (Micron)

Server is up to date with latest updates installed and MS SQL Server is on default settings.
How can I find what is causing this. Please help me. Thanks

Please check the screenshots

enter image description here
enter image description here
enter image description here
enter image description here
enter image description here

asked May 14, 2017 at 0:00

aadi1295's user avatar

5

There are a few ways to approach this.

  1. Download sp_WhoIsActive and run it when you notice a CPU spike, or log it to a table and query the table looking at the CPU column (maybe ORDER BY CPU DESC).

  2. Examine the plan cache using a free script — I co-author one called sp_BlitzCache. By default, it will return the top 10 CPU consuming queries in your server’s plan cache.

  3. Buy a monitoring tool like SentryOne Performance Advisor and use it to examine your server during a spike.

answered May 14, 2017 at 0:14

Erik Darling's user avatar

Erik DarlingErik Darling

38.3k14 gold badges128 silver badges413 bronze badges

0

You can also start with wait stats.

use the DMV sys.dm_os_wait_stats and capture the wait stats over a period of time.

If you see very high CXPACKET waits (more than 50% than the rest of the waits) you must read this article and watch the 15 minute video by Brent Ozar.

answered May 14, 2017 at 13:38

ishan verma's user avatar

2

Как понять что проблема именно в SQL Server — Заходим в Диспетчер задач, на вкладке Подробности находим sqlserver и смотрим колонку ЦП.

Если это значение постонно высокое, то значит где-то идет утечка CPU. 

В этом руководстве мы собрали различные советы как решать подобную проблему 

Поиск проблемных мест в SQL Server по CPU

1. Cмотрим счетчики perfmon 

Определяем проблема в Kernel или User запросах

В perfmon смотрим следующие параметры: 

  • Processor: % Privileged Time – Percentage of time processor spends on execution of Microsoft Windows kernel commands such as OS activity. (If more than 30% involve Windows Admins)
  • Process (sqlservr): % Privileged Time – the sum of processor time on each processor for all threads of the process (SQL Kernel)
  •  Processor: % User Time – percentage of time the processor spends on executing user processes such as SQL Server. This includes I/O requests from SQL Server

Если это значение  % Privileged Time / No of logical cpus больше 30%, то скорее всего дело в системных настройках, возможно антивирус. 

Используя данную инструкцию вы можете найти проблемные spID, которые в данный момент загружают процессор — https://www.mssqltips.com/sqlservertip/2454/how-to-find-out-how-much-cpu-a-sql-server-process-is-really-using/

2. Ищем проблемные процессы

SELECT * FROM sys.sysprocesses
WHERE cmd like 'LAZY WRITER' or cmd like '%Ghost%' or cmd like 'RESOURCE MONITOR'

альтернативный вариант: 

SELECT top 20 spid, kpid, dbid, cpu, memusage FROM sysprocesses
order by cpu desc 

spID с 1 до 50 — это системные. Мы можем отключать (kill spID) или смотреть запрос только для пользовательских (spID>50). 

Также пробуем использовать  хранимки exec sp_who, sp_who1, sp_who2, sp_who3 — они позволяют посмотреть все процессы и их текущее состояние. 

По spid можно найти этот запрос: 

DECLARE @sqltext VARBINARY(128)
SELECT @sqltext = sql_handle
FROM sys.sysprocesses
WHERE spid = 78
SELECT TEXT
FROM sys.dm_exec_sql_text(@sqltext)
GO

Альтернативно вы можете посмотреть последний запрос, выполняющийся в рамках этого spID: 

DBCC INPUTBUFFER(60)
GO
SELECT @@SPID  -- получить SPID текущего процесса
GO

А также можно убить процесс через kill spID. Убили процесс — и посмотрели как это сказалось на загрузке. 

3. Выявление проблем через спец запросы SQL

Также попробуйте выполнить следующие запросы для поиска проблемных мест по CPU 

SELECT GETDATE() AS "RunTime", st.text AS batch, SUBSTRING(st.text,statement_start_offset / 2+1
,((CASE WHEN a.statement_end_offset = -1
THEN (LEN(CONVERT(nvarchar(max),st.text)) * 2)
ELSE a.statement_end_offset END)  - a.statement_start_offset) / 2+1)  AS current_statement
, qp.query_plan, a.*
FROM sys.dm_exec_requests a CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) AS st
CROSS APPLY sys.dm_exec_query_plan(a.plan_handle) AS qp
ORDER BY CPU_time DESC

Еще один скрипт для поиска проблемных запросов по CPU:

/*
Disclaimer: I am not sure for the origin of this script/query.
This query is used in our team to identify and resolve high CPU issue

*/
--define the temptables that will hold intermediary results
IF OBJECT_ID('tempdb..#dbcc') IS NOT NULL
    DROP TABLE #dbcc

create table #dbcc(c1 varchar(15), c2 int, c3 varchar(255),spid int default 0)

IF OBJECT_ID('tempdb..#cpugroups') IS NOT NULL
    DROP TABLE #cpugroups

create table #cpugroups (sql_handle binary(20), sql_text nvarchar(50),total_cpu bigint,total_io bigint,total_sessions int, total_threads int)


--take the SPID groups that are running same code (NOT statement)
insert into #cpugroups
select top 10 sql_handle,substring((select text from fn_get_sql(sql_handle)),1,50), SUM(CPU) TotalCPUForGroup, SUM(physical_io) TotalIOForGroup, COUNT(distinct spid) TotalNoOfSessions,COUNT(*) TotalNoOfThreads
from master..sysprocesses (nolock)
where spid>50 and status<>'sleeping'
and sql_handle<>0x0 and spid<>@@spid
group by sql_handle
order by TotalCPUForGroup desc


declare @sql nvarchar(max)
declare @t table (spid int)

INSERT INTO @t
SELECT DISTINCT spid FROM master..sysprocesses WHERE spid>50 and sql_handle in (select sql_handle from #cpugroups)


declare @spid int


WHILE EXISTS(select * from @t)
BEGIN
  select top 1 @spid=spid from @t
  set @sql='dbcc inputbuffer('+LTRIM(STR(@spid))+')'

  --try to retrieve the original command for all SPIDs
  BEGIN TRY
    INSERT INTO #dbcc(c1, c2, c3)
    EXEC (@sql)

    update #dbcc
    set spid=@spid
    where spid=0

  END TRY
  BEGIN CATCH
  END CATCH


  delete from @t where spid=@spid

END


select * from #cpugroups
select c3 [sql_text], count(*) NoOfSessionsRunning from #dbcc group by c3 order by 2 desc
select * from #dbcc

Для найденных элементов можно удалить план в кеше (подставив sql_handle):

DBCC FREEPROCCACHE (plan_handle_id_goes_here)

Еще 1 запрос на поиск проблем по CPU:

SELECT
	r.session_id
	,st.TEXT AS batch_text
	,SUBSTRING(st.TEXT, statement_start_offset / 2 + 1, (
			(
				CASE
					WHEN r.statement_end_offset = - 1
						THEN (LEN(CONVERT(NVARCHAR(max), st.TEXT)) * 2)
					ELSE r.statement_end_offset
					END
				) - r.statement_start_offset
			) / 2 + 1) AS statement_text
	,qp.query_plan AS 'XML Plan'
	,r.*
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS st
CROSS APPLY sys.dm_exec_query_plan(r.plan_handle) AS qp
ORDER BY cpu_time DESC

И еще один: 

SELECT s.session_id,
r.status,
r.blocking_session_id 'Blk by',
r.wait_type,
wait_resource,
r.wait_time / (1000 * 60) 'Wait M',
r.cpu_time,
r.logical_reads,
r.reads,
r.writes,
r.total_elapsed_time / (1000 * 60) 'Elaps M',
Substring(st.TEXT,(r.statement_start_offset / 2) + 1,
((CASE r.statement_end_offset
WHEN -1
THEN Datalength(st.TEXT)
ELSE r.statement_end_offset
END - r.statement_start_offset) / 2) + 1) AS statement_text,
Coalesce(Quotename(Db_name(st.dbid)) + N'.' + Quotename(Object_schema_name(st.objectid, st.dbid)) + N'.' +
Quotename(Object_name(st.objectid, st.dbid)), '') AS command_text,
r.command,
s.login_name,
s.host_name,
s.program_name,
s.last_request_end_time,
s.login_time,
r.open_transaction_count
FROM sys.dm_exec_sessions AS s JOIN sys.dm_exec_requests AS r
ON r.session_id = s.session_id CROSS APPLY sys.Dm_exec_sql_text(r.sql_handle) AS st
WHERE r.session_id != @@SPID
ORDER BY r.cpu_time desc

Также посмотрите правой кнопкой на Сервере > reports> Standard reports > Top CPU queries.

4. Анализ найденных проблемных запросов 

В найденных запросах посмотрите execution plan и посмотрите где наибольший cost. 

Дополнительные рекомендации: 

  • проверьте что стоят все необходимые индексы на таблицах, которые участвуют в проблемных запросах. 
  • постарайтесь как можно «быстрее» в where обрезать данные для уменьшения выборки для последующей обработки. Т.е. старайтесь не допускать сканирования по очень большой таблице без использования какой либо фильтрации (либо эта фильтрация содержит затратную логику проверки условий)
  • проверьте, что у вас нет затратных конвертаций типов 
  • если используете множественно функции, проверьте что они используют минимум извлечений внутри.
  • Вариант — поставить обновление https://support.microsoft.com/ru-ru/help/3195888/fix-high-cpu-usage-causes-performance-issues-in-sql-server-2016-and-20
    select * from sys. dm_os_spinlock_stats -- провериить что нет больших чисел у  SECURITY_CACHE и CMED_HASH_SET -  если есть  то установить обновления
  • https://docs.microsoft.com/ru-ru/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-query-plan-transact-sql?view=sql-server-ver15 находить тяжелые процессы и смотреть их планы запросов
  • Как посмотреть запрос по sql handle или plan handle — https://docs.microsoft.com/ru-ru/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-sql-text-transact-sql?view=sql-server-ver15

Источники и что почитать по теме утечек CPU 

  • http://dba-datascience.com/high-cpu-usage-sql-server/
  • https://support.microsoft.com/ru-ru/help/2009160/high-cpu-use-occurs-in-your-queries-on-sql-server
  • https://blog.sqlauthority.com/2018/03/23/sql-server-how-to-fix-high-cpu-consumption-on-sql-server-2017-and-2016/
  • https://www.c-sharpcorner.com/blogs/difference-between-spwho-spwho2
  • https://docs.microsoft.com/ru-ru/archive/blogs/docast/sql-high-cpu-troubleshooting-checklist очень подробная статья.
  • https://www.mssqltips.com/sqlservertip/2454/how-to-find-out-how-much-cpu-a-sql-server-process-is-really-using/
  • https://www.youtube.com/watch?v=98c8spD5k5s

Альтернативная документация по поиску CPU проблем SQL Server

Что проверить в первую очередь:

  • Конфигурация железа сервера.
  • Дисковая подсистема.
  • Свободное место.
  • Антивирус на сервере стоит?
  • БД (операции) не выполняются / выполняются, как часто.
  • Проверка целостности
  • Индексы перестройка
  • Обновление статистики
  • Сжатие (шринк)

Общие рекомендации

 http://sqlcom.ru/optimization_query/sql-server-performance-problems-after-moved-to-new-server/

Электропитания — использовать «Высокая производительность»

настройка кэширования записи на диск

антивирус, —  добавить папку SQL Server и файлов БД в исключения

настройка настроены параметры параллелизма (cost threshold for parallelism, max degree of parallelism)

настройка Hyper-Threading

Мониторинг  SSMS — «Стандартные отчеты»

 «Стандартные отчеты» в пользовательском интерфейсе Management Studio

SQL Server Management Studio предоставляет минимальный необходимый набор стандартных отчетов для получения информации в режиме пользовательского интерфейса.

Доступ к этим отчетам может быть выполнен через «Обозреватель объектов» (Object explorer) → Правый клик мыши по базе данных → «Отчеты» (Reports) → «Стандартный отчет» (Standard reports)

Перечень «Стандартные отчеты»:

Перечень «Стандартные отчеты»:

  • Занято место на диске
  • Использование дисковой памяти верхними таблицами
  • Использование дисковой памяти таблицей
  • Использование дисковой памяти секцией
  • События резервного копирования и восстановления
  • Все транзакции
  • Все блокирующие транзакции
  • Самые продолжительные транзакции
  • Транзакции, блокирующие наибольшее кол-во транзакций при выполнении
  • Транзакции с наибольшим кол-вом блокировок
  • Статистика блокировки ресурсов по объектам
  • Статистика выполнения объектов
  • Журнал согласованности баз данных
  • Статистика использования индекса
  • Физическая статистика индекса
  • Журнал изменений схемы
  • Статистика пользователей
  • Перечень «Пользовательские отчеты» 

Мониторинг  Activity Monitor — Монитор активности

Открыть монитор активности CTRL+ALT+A или SSMS стандарт. панель инструментов значок.

Монитор активности SQL Server 2008 объединяет данные о процессах, предоставляя наглядную информацию по выполняющимся и недавно выполнявшимся процессам.

Монитор активности предлагает администратору раздел обзора, внешне похожий на Диспетчер задач Windows, а также компоненты детального просмотра отдельных процессов, ожидания ресурсов, ввода-вывода в файлы данных и последних ресурсоемких запросов.

Мониторинг  Reporting Services — Performance Dashboard Reports

Для наблюдения за SQL Server есть интересный пакет отчетов Reporting Services, называется он SQL Server Performance Dashboard Reports.

Помощник в наблюдении за SQL Server

Можноскачать

The SQL Server 2012 Performance Dashboard Reports are Reporting Services report files designed to be used with the Custom Reports feature of SQL Server Management Studio.

Вопрос – используется ли Reporting Services?

Мониторинг  (платный)

Готовый мониторинг для Microsoft SQL Server

(платный) от разных компаний:

    Idera — SQL Diagnostic Manager

    Red-Gate — SQL Monitor

    ApexSQL — ApexSQL Monitor

    Quest — Spotlight on SQL Server Enterprise

    SentryOne — SQL centry

Так же — вариант мониторинга SQL Server на Zabbix.

СКРИПТЫ — системные

sp_who и sp_who2

найти блокирующие и ожидающие запросы

1 — 100_1_sys.dm_exec_query_stats — most time cpu

— 100_1_sys.dm_exec_query_stats_Which Queries are taking the most time cpu to execute

sys.dm_exec_query_stats     OUTER APPLY sys.dm_exec_query_pl

3 — 100_3_sys.dm_exec_query_stats cpu-utilization

100_3_sys.dm_exec_query_stats_sql-server-cpu-utilization-io-usage-and-memory-usage.sql

sys.dm_exec_query_stats  CROSS APPLY  sys.dm_exec_plan_attributes

Результат имеет вид.

row_num

DatabaseName

CPU_Time(Ms)

CPUPercent

1

master

6355553

88.11

2

АutoParts_shop_v2

357018

4.95

3

testDB_1

255776

3.55

4

tempdb

244863

3.39

5

msdb

142

0

4 — 100_4_sys.dm_exec_query_stats_Тяжелые запросы

— 100_4_sys.dm_exec_query_stats_Тяжелые запросы

— Скрипт основан на представлении sys.dm_exec_query_stats:

5 — 100_5_sys.dm_tran_locks_заблокированные запросы

Быстрый способ найти заблокированные запросы

— 100_5_sys.dm_tran_locks_заблокированные запросы

— мы должны убить blocking_session_id.

— Изучите столбец BlockingText

—  Мы можем убить сессию с помощью KILL 52

6 — 100_6_Какой процессор чем загружен

— 100_6_Какой процессор чем загружен

7 — 100_7_Информация о пользователях и подключения.sql

— 100_7_Информация о пользователях и подключения.sql

— представлениям: sys.dm_exec_connections, master.sys.sysprocesses, sys.dm_exec_sessions

СКРИПТЫ — sp_WhoIsActive

Вызов:

200_2_sp_WhoIsActive_Параметры.sql

Источник:

http://whoisactive.com/

sp_whoisactive is a comprehensive activity monitoring stored procedure that works for all versions of SQL Server from 2005 through 2017.

«Who Is Active» показывает только текущую активность сервера ( кто и что вызывает нагрузку в данный момент времени.). Можно использовать для сбора и последующего анализа данных.

Внутри используется 15 DMV.

Много параметров.

                               @show_sleeping_spids = 2,  -- Показать спящие сессии

                               @show_system_spids = 1, -- Показать системные сессии

                               @show_own_spid = 1  --  Показать вашу собственную сессию

                               , @get_full_inner_text = 1 -- видеть всю активность,

                               , @get_outer_command = 1 -- что вызвало этот [sql_text]

                               , @get_task_info = 1 -- Вывести в столбец [wait_info] не только самое важное ожидание, но и все остальные:

                               , @get_transaction_info = 1 --9. Можно так же убрать агрегацию транзакций одной сессии и вывести их по отдельности:

                               , @get_additional_info = 1 --10. Вывести более детальную информацию. Будет добавлен столбец [additional_info] с информацией в формате XML

                               -- , @find_block_leaders = 1 -- количество заблокированных процессов каждой сессией:

                               , @sort_order = '[CPU] DESC' -- сортировку вывода

СКРИПТЫ — sp_Blitz

Нужно ставить внешнюю процедуру. Можно ставить в любую БД.

Источник:

https://www.brentozar.com/askbrent/

https://www.brentozar.com/first-aid/

Быстрая проверка вашего SQL Server (sp_Blitz)

Как работает:

  1. Вы устанавливаете процедуру
  2. Запускаете когда вам удобно

Обычно процедура выполняется от 5 до 15 секунд. Скрипт максимально проработан чтобы не препятствовать работе других пользователей, но вам всё равно лучше проверить его работу на тестовом сервере

--dbo.sp_Blitz -- общие параметры
--sp_BlitzFirst - "Why is my SQL Server slow right now?"
--sp_BlitzCache - "What are the most resource-intensive queries on this server?"
--sp_BlitzIndex - "How could I tune indexes to make this database faster?"
--sp_BlitzQueryStore - "How has this query performed over time?"
--Sorry, sp_BlitzQueryStore doesn't work on versions of SQL prior to 2016, or Azure Database compatibility < 130.
--sp_BlitzWho --Who’s running what queries right now?

SQL Profiler

SQL Profiler  —  используйте, где нужно быстро посмотреть, что там за запрос.

SQL Profiler — остается одним из самых используемых инструментов для диагностики работы SQL Server, несмотря на то, что считается устаревшим. Может быть удален в будущих версиях СУБД, является графической надстройкой для SQL Trace . Как и SQL Profiler, SQL Trace считается устаревшим инструментом и может быть удален в будущем.  SQL Trace находится в режиме поддержки и не дополняется новым функционалом.

Кол-во счетчиков (событий) = 180.

Extended Events

В SSMS в разделе «Управление -> Расширенные события -> Сеансы» Вы можете найти список всех сеансов расширенных событий.

Одной из распространенных проблем, с которой сталкиваются пользователи Windows NT 64, является высокое потребление процессора Sql Server. Это может привести к замедлению работы системы и возникновению ошибок выполнения запросов.

Когда Sql Server использует большую часть ресурсов процессора, это может быть вызвано несколькими факторами. Одним из них является неправильная конфигурация Sql Server, которая может привести к недостаточной оптимизации запросов и использованию избыточных ресурсов. В таком случае рекомендуется провести анализ настроек Sql Server и внести соответствующие изменения.

Также высокое потребление процессора Sql Server может быть связано с неправильной настройкой индексов или структуры базы данных. Индексы позволяют ускорить выполнение запросов и снизить нагрузку на процессор. При неправильном использовании индексов может происходить полный перебор данных, что приводит к увеличению загрузки процессора. В этом случае рекомендуется провести оптимизацию индексов и структуры данных базы.

Однако, на большей нагрузке ЦП или в случае, когда вы не знаете, как распределить нагрузку на Sql сервера на определенного пользователя, вы можете установить ограничение потребления процессора с помощью специальных инструментов, таких как Resource Governor или Utilities User Profile Manager.

Важно заметить, что решение проблемы с высоким потреблением процессора Sql Server может быть сложным процессом и зависит от многих факторов. Для эффективного решения такой проблемы рекомендуется обратиться к специалистам или провести дополнительные исследования и эксперименты.

Содержание

  1. Причины большого потребления процессора Sql Server
  2. Неоптимальная конфигурация сервера
  3. Неправильное использование индексов
  4. Проблемы с запросами и процедурами

Причины большого потребления процессора Sql Server

Большое потребление процессора в Sql Server может быть вызвано несколькими причинами:

  • Недостаточная оптимизация запросов: плохо написанные или неэффективные запросы могут приводить к излишней нагрузке на процессор. Важно оптимизировать запросы, используя индексы и правильные операторы.
  • Высокая нагрузка на базу данных: если на сервере выполняется множество запросов или база данных слишком большая, это также может привести к большому потреблению процессора. Можно рассмотреть возможность распределения нагрузки между несколькими серверами или использовать более мощное оборудование.
  • Неправильная конфигурация Sql Server: некоторые настройки Sql Server могут повлиять на потребление процессора, например, установленное значение максимального количества одновременных запросов или неправильно настроенные планы выполнения запросов. Важно проверить и изменить эти настройки, чтобы достичь оптимальной производительности.
  • Проблемы с индексами: отсутствие или несовершенные индексы могут приводить к сканированию всей таблицы, что требует большого количества ресурсов процессора. Рекомендуется создать и поддерживать соответствующие индексы для улучшения скорости выполнения запросов.
  • Неправильная конфигурация аппаратного обеспечения: плохо настроенное оборудование, например, слабые процессоры или недостаточное количество оперативной памяти, также может быть причиной высокого потребления процессора. Важно убедиться, что сервер соответствует требованиям Sql Server.

Идентификация и решение проблем с большим потреблением процессора Sql Server может потребовать выполнения дополнительных диагностических действий. Но следуя вышеуказанным рекомендациям, можно снизить нагрузку на процессор и повысить производительность базы данных.

Неоптимальная конфигурация сервера

Одной из причин высокого потребления процессора сервером SQL Server на Windows NT 64 может быть неоптимальная конфигурация сервера. Ниже приведены несколько возможных проблем:

  • Недостаточные ресурсы: Если серверу SQL Server не выделены достаточные ресурсы, например, мало оперативной памяти или количество процессоров недостаточно, это может привести к повышенной загрузке процессора. Рекомендуется увеличить ресурсы сервера, чтобы улучшить его производительность.
  • Плохая настройка индексов: Отсутствие или неправильная настройка индексов на таблицах базы данных может существенно замедлить выполнение запросов и увеличить нагрузку на процессор. Рекомендуется проанализировать и оптимизировать индексы для повышения производительности.
  • Медленные или плохо оптимизированные запросы: Если на сервере SQL Server выполняются запросы, которые требуют большого количества ресурсов процессора, это может привести к его высокой загрузке. Рекомендуется выполнить профилирование запросов и оптимизировать их для уменьшения нагрузки на процессор.
  • Неправильные настройки сервера SQL Server: Некоторые настройки сервера SQL Server, такие как максимальное количество параллельных запросов, максимальное количество рабочих потоков и другие, могут приводить к неэффективному использованию ресурсов процессора. Рекомендуется проанализировать и оптимизировать эти настройки для уменьшения нагрузки на процессор.

В связи с вышеперечисленными причинами необходимо провести анализ и оптимизацию конфигурации сервера SQL Server для снижения его потребления процессора и повышения его производительности.

Неправильное использование индексов

SQL Server предоставляет возможность создания индексов, чтобы повысить производительность запросов и снизить нагрузку на процессор. Однако, неправильное использование индексов может привести к увеличению потребления процессора и снижению производительности системы.

Ошибки в использовании индексов могут проявляться в нескольких аспектах:

  1. Создание слишком большого количества индексов. Создание большого количества индексов может привести к увеличению нагрузки на процессор, так как каждый индекс должен обновляться при выполнении изменений в таблице. Вместо создания множества индексов, рекомендуется анализировать запросы, на которые чаще всего выполняются поиски и сортировки, и создавать индексы только для этих запросов.

  2. Отсутствие индексов на часто используемые столбцы. Если в таблице отсутствуют индексы на столбцы, по которым выполняются поиски или сортировки, то SQL Server должен будет проводить сканирование всей таблицы для выполнения запроса. Это может привести к значительному увеличению потребления процессора. Рекомендуется создавать индексы на столбцы, по которым часто выполняются запросы.

  3. Использование ненужных индексов. Иногда разработчики создают индексы, которые не используются в реальных запросах. Это может быть вызвано неправильным пониманием бизнес-логики или неверными оценками производительности. Ненужные индексы оказывают негативное влияние на производительность системы, так как они занимают место на диске и должны обновляться при изменениях в таблице. Рекомендуется регулярно анализировать структуру индексов и удалять ненужные.

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

Проблемы с запросами и процедурами

Одна из причин большого потребления процессора в SQL Server на Windows NT 64 может быть связана с проблемами в запросах и процедурах, выполняемых на сервере. В данном случае, необходимо рассмотреть следующие аспекты:

1. Некачественные запросы

Если запросы написаны неэффективно или не оптимизированы для работы с большим объемом данных, это может вызывать значительное увеличение нагрузки на процессор. В таких случаях необходимо провести анализ и оптимизацию запросов, использовать индексы, рассмотреть возможность добавления/изменения индексов на таблицах и т.д. Это может помочь улучшить производительность запросов и снизить нагрузку на процессор.

2. Нестабильные или долго выполняющиеся процедуры

Если в системе есть процедуры, которые долго выполняются, блокируют другие процессы или используют большое количество ресурсов, это также может привести к увеличению потребления процессора. В таких случаях необходимо провести анализ и оптимизацию процедур, рассмотреть возможность использования параллельной обработки, добавление оптимизированных индексов и т.д. Это поможет ускорить выполнение процедур и уменьшить нагрузку на процессор.

3. Блокировки и конфликты

Блокировки и конфликты между различными запросами могут приводить к низкой производительности и увеличению потребления процессора. В таких случаях необходимо провести анализ наличия блокировок и конфликтов, оптимизировать запросы и процедуры, использовать транзакции с минимальной блокировкой и т.д. Это также поможет улучшить производительность и снизить нагрузку на процессор.

Решение проблем с запросами и процедурами может быть сложным процессом, требующим глубокого понимания SQL Server и опыта работы с базами данных. В случае затруднений, рекомендуется обратиться к специалистам, которые смогут провести более детальный анализ и предложить оптимальные решения.

  • Sql через командную строку windows
  • Sql server management studio скачать для windows 11
  • Spreadtrum drivers for windows 10
  • Sql server for windows server 2012
  • Sql server для windows server 2008 r2 x64