Ko etahi waahanga o te tirotiro a MS SQL Server. Nga Aratohu mo te Whakatakoto i nga Kara Tohu

Kupuhipa

I te nuinga o nga wa, ka pa mai nga kaiwhakamahi, nga kaiwhakawhanake me nga kaiwhakahaere o te MS SQL Server DBMS ki nga raruraru mahi o te paataka raraunga, te DBMS katoa ranei, na reira he mea tino tika te tirotiro a MS SQL Server.
He taapiri tenei tuhinga ki te tuhinga Ma te whakamahi i te Zabbix ki te Aroturuki i te Raraunga Raraunga MS SQL Server a ka hipokina e ia etahi waahanga o te tirotiro i te MS SQL Server, ina koa: me pehea te whakatau tere ko tehea rauemi kei te ngaro, me nga taunakitanga mo te whakatakoto tohu tohu.
Kia mahi nga tuhinga e whai ake nei, me hanga e koe he aronuinga inf i roto i te putunga raraunga e hiahiatia ana penei:
Te hanga kaupapa inf

use <имя_БД>;
go
create schema inf;

Tikanga mo te kite i te kore o te RAM

Ko te tohu tuatahi mo te kore o te RAM ko te keehi ka kainga e tetahi tauira o MS SQL Server nga RAM katoa kua tohaina ki a ia.
Hei mahi i tenei, ka hangaia e matou te ahua o te inf.vRAM e whai ake nei:
Te hanga i te tirohanga inf.vRAM

CREATE view [inf].[vRAM] as
select a.[TotalAvailOSRam_Mb]						--сколько свободно ОЗУ на сервере в МБ
		 , a.[RAM_Avail_Percent]					--процент свободного ОЗУ на сервере
		 , a.[Server_physical_memory_Mb]				--сколько всего ОЗУ на сервере в МБ
		 , a.[SQL_server_committed_target_Mb]			--сколько всего ОЗУ выделено под MS SQL Server в МБ
		 , a.[SQL_server_physical_memory_in_use_Mb] 		--сколько всего ОЗУ потребляет MS SQL Server в данный момент времени в МБ
		 , a.[SQL_RAM_Avail_Percent]				--поцент свободного ОЗУ для MS SQL Server относительно всего выделенного ОЗУ для MS SQL Server
		 , a.[StateMemorySQL]						--достаточно ли ОЗУ для MS SQL Server
		 , a.[SQL_RAM_Reserve_Percent]				--процент выделенной ОЗУ для MS SQL Server относительно всего ОЗУ сервера
		 --достаточно ли ОЗУ для сервера
		, (case when a.[RAM_Avail_Percent]<10 and a.[RAM_Avail_Percent]>5 and a.[TotalAvailOSRam_Mb]<8192 then 'Warning' when a.[RAM_Avail_Percent]<=5 and a.[TotalAvailOSRam_Mb]<2048 then 'Danger' else 'Normal' end) as [StateMemoryServer]
	from
	(
		select cast(a0.available_physical_memory_kb/1024.0 as int) as TotalAvailOSRam_Mb
			 , cast((a0.available_physical_memory_kb/casT(a0.total_physical_memory_kb as float))*100 as numeric(5,2)) as [RAM_Avail_Percent]
			 , a0.system_low_memory_signal_state
			 , ceiling(b.physical_memory_kb/1024.0) as [Server_physical_memory_Mb]
			 , ceiling(b.committed_target_kb/1024.0) as [SQL_server_committed_target_Mb]
			 , ceiling(a.physical_memory_in_use_kb/1024.0) as [SQL_server_physical_memory_in_use_Mb]
			 , cast(((b.committed_target_kb-a.physical_memory_in_use_kb)/casT(b.committed_target_kb as float))*100 as numeric(5,2)) as [SQL_RAM_Avail_Percent]
			 , cast((b.committed_target_kb/casT(a0.total_physical_memory_kb as float))*100 as numeric(5,2)) as [SQL_RAM_Reserve_Percent]
			 , (case when (ceiling(b.committed_target_kb/1024.0)-1024)<ceiling(a.physical_memory_in_use_kb/1024.0) then 'Warning' else 'Normal' end) as [StateMemorySQL]
		from sys.dm_os_sys_memory as a0
		cross join sys.dm_os_process_memory as a
		cross join sys.dm_os_sys_info as b
		cross join sys.dm_os_sys_memory as v
	) as a;

Na ka taea e koe te whakatau ko tetahi tauira o te MS SQL Server ka pau nga mahara katoa kua tohaina ki a ia e te patai e whai ake nei:

select  SQL_server_physical_memory_in_use_Mb,  SQL_server_committed_target_Mb
from [inf].[vRAM];

Mena he nui ake, he rite ranei te SQL_server_physical_memory_in_use_Mb ki SQL_server_committed_target_Mb, katahi ka tirohia nga tatauranga tatari.
Hei whakatau i te kore o te RAM na roto i nga tatauranga tatari, me hanga te tirohanga inf.vWaits:
Te hanga i te Tirohanga inf.vWaits

CREATE view [inf].[vWaits] as
WITH [Waits] AS
    (SELECT
        [wait_type], --имя типа ожидания
        [wait_time_ms] / 1000.0 AS [WaitS],--Общее время ожидания данного типа в миллисекундах. Это время включает signal_wait_time_ms
        ([wait_time_ms] - [signal_wait_time_ms]) / 1000.0 AS [ResourceS],--Общее время ожидания данного типа в миллисекундах без signal_wait_time_ms
        [signal_wait_time_ms] / 1000.0 AS [SignalS],--Разница между временем сигнализации ожидающего потока и временем начала его выполнения
        [waiting_tasks_count] AS [WaitCount],--Число ожиданий данного типа. Этот счетчик наращивается каждый раз при начале ожидания
        100.0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER() AS [Percentage],
        ROW_NUMBER() OVER(ORDER BY [wait_time_ms] DESC) AS [RowNum]
    FROM sys.dm_os_wait_stats
    WHERE [waiting_tasks_count]>0
		and [wait_type] NOT IN (
        N'BROKER_EVENTHANDLER',         N'BROKER_RECEIVE_WAITFOR',
        N'BROKER_TASK_STOP',            N'BROKER_TO_FLUSH',
        N'BROKER_TRANSMITTER',          N'CHECKPOINT_QUEUE',
        N'CHKPT',                       N'CLR_AUTO_EVENT',
        N'CLR_MANUAL_EVENT',            N'CLR_SEMAPHORE',
        N'DBMIRROR_DBM_EVENT',          N'DBMIRROR_EVENTS_QUEUE',
        N'DBMIRROR_WORKER_QUEUE',       N'DBMIRRORING_CMD',
        N'DIRTY_PAGE_POLL',             N'DISPATCHER_QUEUE_SEMAPHORE',
        N'EXECSYNC',                    N'FSAGENT',
        N'FT_IFTS_SCHEDULER_IDLE_WAIT', N'FT_IFTSHC_MUTEX',
        N'HADR_CLUSAPI_CALL',           N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
        N'HADR_LOGCAPTURE_WAIT',        N'HADR_NOTIFICATION_DEQUEUE',
        N'HADR_TIMER_TASK',             N'HADR_WORK_QUEUE',
        N'KSOURCE_WAKEUP',              N'LAZYWRITER_SLEEP',
        N'LOGMGR_QUEUE',                N'ONDEMAND_TASK_QUEUE',
        N'PWAIT_ALL_COMPONENTS_INITIALIZED',
        N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP',
        N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP',
        N'REQUEST_FOR_DEADLOCK_SEARCH', N'RESOURCE_QUEUE',
        N'SERVER_IDLE_CHECK',           N'SLEEP_BPOOL_FLUSH',
        N'SLEEP_DBSTARTUP',             N'SLEEP_DCOMSTARTUP',
        N'SLEEP_MASTERDBREADY',         N'SLEEP_MASTERMDREADY',
        N'SLEEP_MASTERUPGRADED',        N'SLEEP_MSDBSTARTUP',
        N'SLEEP_SYSTEMTASK',            N'SLEEP_TASK',
        N'SLEEP_TEMPDBSTARTUP',         N'SNI_HTTP_ACCEPT',
        N'SP_SERVER_DIAGNOSTICS_SLEEP', N'SQLTRACE_BUFFER_FLUSH',
        N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
        N'SQLTRACE_WAIT_ENTRIES',       N'WAIT_FOR_RESULTS',
        N'WAITFOR',                     N'WAITFOR_TASKSHUTDOWN',
        N'WAIT_XTP_HOST_WAIT',          N'WAIT_XTP_OFFLINE_CKPT_NEW_LOG',
        N'WAIT_XTP_CKPT_CLOSE',         N'XE_DISPATCHER_JOIN',
        N'XE_DISPATCHER_WAIT',          N'XE_TIMER_EVENT')
    )
, ress as (
	SELECT
	    [W1].[wait_type] AS [WaitType],
	    CAST ([W1].[WaitS] AS DECIMAL (16, 2)) AS [Wait_S],--Общее время ожидания данного типа в миллисекундах. Это время включает signal_wait_time_ms
	    CAST ([W1].[ResourceS] AS DECIMAL (16, 2)) AS [Resource_S],--Общее время ожидания данного типа в миллисекундах без signal_wait_time_ms
	    CAST ([W1].[SignalS] AS DECIMAL (16, 2)) AS [Signal_S],--Разница между временем сигнализации ожидающего потока и временем начала его выполнения
	    [W1].[WaitCount] AS [WaitCount],--Число ожиданий данного типа. Этот счетчик наращивается каждый раз при начале ожидания
	    CAST ([W1].[Percentage] AS DECIMAL (5, 2)) AS [Percentage],
	    CAST (([W1].[WaitS] / [W1].[WaitCount]) AS DECIMAL (16, 4)) AS [AvgWait_S],
	    CAST (([W1].[ResourceS] / [W1].[WaitCount]) AS DECIMAL (16, 4)) AS [AvgRes_S],
	    CAST (([W1].[SignalS] / [W1].[WaitCount]) AS DECIMAL (16, 4)) AS [AvgSig_S]
	FROM [Waits] AS [W1]
	INNER JOIN [Waits] AS [W2]
	    ON [W2].[RowNum] <= [W1].[RowNum]
	GROUP BY [W1].[RowNum], [W1].[wait_type], [W1].[WaitS],
	    [W1].[ResourceS], [W1].[SignalS], [W1].[WaitCount], [W1].[Percentage]
	HAVING SUM ([W2].[Percentage]) - [W1].[Percentage] < 95 -- percentage threshold
)
SELECT [WaitType]
      ,MAX([Wait_S]) as [Wait_S]
      ,MAX([Resource_S]) as [Resource_S]
      ,MAX([Signal_S]) as [Signal_S]
      ,MAX([WaitCount]) as [WaitCount]
      ,MAX([Percentage]) as [Percentage]
      ,MAX([AvgWait_S]) as [AvgWait_S]
      ,MAX([AvgRes_S]) as [AvgRes_S]
      ,MAX([AvgSig_S]) as [AvgSig_S]
  FROM ress
  group by [WaitType];

I tenei keehi, ka taea e koe te whakatau i te kore o te RAM me te patai e whai ake nei:

SELECT [Percentage]
      ,[AvgWait_S]
  FROM [inf].[vWaits]
  where [WaitType] in (
    'PAGEIOLATCH_XX',
    'RESOURCE_SEMAPHORE',
    'RESOURCE_SEMAPHORE_QUERY_COMPILE'
  );

I konei me aro koe ki nga tohu Ōrau me AvgWait_S. Mena he mea nui ki a raatau, he nui rawa te tupono kaore i te nui te RAM mo te tauira MS SQL Server. Ka whakatauhia nga uara nui mo ia punaha. Heoi, ka taea e koe te timata me enei e whai ake nei: Te ōrau>=1 me AvgWait_S>=0.005.
Ki te whakaputa tohu ki te punaha aroturuki (hei tauira, Zabbix), ka taea e koe te hanga i nga patai e rua e whai ake nei:

  1. e hia nga momo tatari e nohoia ana e te RAM i te ōrau (te tapeke o aua momo tatari katoa):
    select coalesce(sum([Percentage]), 0.00) as [Percentage]
    from [inf].[vWaits]
           where [WaitType] in (
               'PAGEIOLATCH_XX',
               'RESOURCE_SEMAPHORE',
                'RESOURCE_SEMAPHORE_QUERY_COMPILE'
      );
    
  2. e hia nga momo tatari RAM e mau ana i roto i nga manomano (te uara morahi o nga wa roa mo nga momo tatari katoa):
    select coalesce(max([AvgWait_S])*1000, 0.00) as [AvgWait_MS]
    from [inf].[vWaits]
           where [WaitType] in (
               'PAGEIOLATCH_XX',
               'RESOURCE_SEMAPHORE',
                'RESOURCE_SEMAPHORE_QUERY_COMPILE'
      );
    

I runga i te kaha o nga uara kua whiwhi mo enei tohu e rua, ka taea e taatau te whakatau mena he nui te RAM mo tetahi tauira o te MS SQL Server.

Tikanga Tirohanga PTM Utaha

Hei tautuhi i te kore o te wa tukatuka, he nui ki te whakamahi i te tirohanga sys.dm_os_schedulers pūnaha. I konei, mena he nui ake te runnable_tasks_count i te 1, katahi ka nui te tupono kaore e ranea te maha o nga matua mo te tauira MS SQL Server.
Hei whakaputa tohu ki tetahi punaha aroturuki (hei tauira, Zabbix), ka taea e koe te hanga i te patai e whai ake nei:

select max([runnable_tasks_count]) as [runnable_tasks_count]
from sys.dm_os_schedulers
where scheduler_id<255;

I runga i te kaha o nga uara kua whiwhi mo tenei tohu, ka taea e taatau te whakatau mena he nui te wa tukatuka (te maha o nga papa CPU) mo tetahi tauira o te MS SQL Server.
Heoi, he mea nui kia maumahara te meka ka taea e nga tono te tono miro maha i te wa kotahi. A, i etahi wa kaore e taea e te kaihoroi te whakatau tika i te uaua o te patai ake. Na ka tohatohahia te tono kia maha rawa nga miro kaore e taea te whakahaere i te wa kotahi i te wa kua whakaritea. Na tenei ano hoki te ahua o te tatari e pa ana ki te kore o te wa tukatuka, me te tipu o te rarangi mo nga kaihōtaka e whakamahi ana i nga waahanga CPU motuhake, ara ko te tohu runnable_tasks_count ka tipu i roto i enei ahuatanga.
I tenei take, i mua i te whakanui ake i te maha o nga uho PTM, me tika te whirihora i nga ahuatanga whakarara o te tauira MS SQL Server ake, a mai i te putanga 2016, whirihora tika i nga ahuatanga whakarara o nga papaunga raraunga e hiahiatia ana:
Ko etahi waahanga o te tirotiro a MS SQL Server. Nga Aratohu mo te Whakatakoto i nga Kara Tohu

Ko etahi waahanga o te tirotiro a MS SQL Server. Nga Aratohu mo te Whakatakoto i nga Kara Tohu
I konei me aro koe ki nga tawhā e whai ake nei:

  1. Max Degree of Parallelism - ka tautuhi i te maha rawa o nga miro ka taea te toha ki ia tono (ko te taunoa ko te 0 - na te punaha whakahaere anake me te putanga o MS SQL Server)
  2. Paepae Utu mo te Whakarara - utu tata mo te whakarara (ko te 5 te taunoa)
  3. Max DOP - ka tautuhi i te maha rawa o nga miro ka taea te toha ki ia uiui i te taumata paparangi (engari kaua e neke ake i te uara o te taonga "Max Degree of Parallelism") (ko te taunoa he 0 - he iti noa na te punaha whakahaere me te putanga o MS SQL Server, me te herenga ki te taonga "Max Degree of Parallelism" o te tauira katoa o MS SQL Server)

I konei e kore e taea te hoatu he tohutaka rite pai mo nga keehi katoa, ara me tātari nga patai taumaha.
Mai i taku ake wheako, ka taunaki ahau i te algorithm o nga mahi e whai ake nei mo nga punaha OLTP hei whakarite i nga ahuatanga whakarara:

  1. tuatahi monohia te whakarara ma te whakarite i te Waeine Whakarara-a-whanui-a-taataki ki te 1
  2. tātarihia nga tono tino taumaha ka kowhiria te maha o nga miro pai mo ratou
  3. Tautuhia te Waeine Max o te Whakarara ki te tau tino pai o nga miro kua tohua mai i te taahiraa 2, a, mo nga papaa raraunga tauwhāiti tautuhia te uara Max DOP i whiwhi mai i te taahiraa 2 mo ia pātengi raraunga
  4. wetewetehia nga tono tino taumaha me te tautuhi i te paanga kino o te miro maha. Mēnā, ka whakanuia te Paepae Utu mō te Whakarara.
    Mo nga punaha penei i te 1C, Microsoft CRM me Microsoft NAV, i te nuinga o te waa, he pai te aukati i te miro maha.

Ano hoki, mena he putanga Paerewa, na te nuinga o te waa he pai te aukati i te panui maha na te mea he iti noa tenei putanga ki te maha o nga papa CPU.
Mo nga punaha OLAP, kaore i te pai te algorithm e whakaahuatia ana i runga ake nei.
Mai i taku ake wheako, ka taunaki ahau i te algorithm o nga mahi e whai ake nei mo nga punaha OLAP mo te whakarite i nga ahuatanga whakarara:

  1. tātarihia nga tono tino taumaha ka kowhiria te maha o nga miro pai mo ratou
  2. Tautuhia te Waeine Max o te Whakarara ki te tau tino pai o nga miro kua tohua mai i te taahiraa 1, a, mo nga papaa raraunga tauwhāiti tautuhia te uara Max DOP i whiwhi mai i te taahiraa 1 mo ia pātengi raraunga
  3. wetewetehia nga patai tino taumaha me te tautuhi i te paanga kino o te whakawhāiti i te whakakotahitanga. Ki te he, ka whakahekehia te Paepae Utu mo te uara Whakarara, tukurua ranei nga taahiraa 1-2 o tenei algorithm

Arā, mo nga punaha OLTP ka haere tatou mai i te miro kotahi ki te miro-maha, mo nga punaha-OLAP, engari, ka haere mai i te miro-maha ki te miro-kotahi. No reira, ka taea e koe te kowhiri i nga tautuhinga whakarara tino pai mo te papaunga raraunga motuhake me te tauira katoa o te MS SQL Server.
He mea nui ano kia mohio koe me whakarereke nga tautuhinga o nga ahuatanga whakarara i roto i te waa, i runga i nga hua o te aro turuki i nga mahi a MS SQL Server.

Nga Aratohu mo te Whakatakoto i nga Kara Tohu

Mai i taku ake wheako me te wheako o aku hoa mahi, mo te mahi tino pai, ka tūtohu ahau ki te whakatakoto i nga haki e whai ake nei ki te taumata oma o te ratonga MS SQL Server mo nga putanga 2008-2016:

  1. 610 - Kua whakahekehia te takiuru o nga whakaurunga ki roto i nga ripanga kua tohua. Ka taea te awhina ki te whakauru ki nga ripanga me te maha o nga rekoata me te maha o nga whakawhitinga, me te tatari roa a WRITELOG mo nga huringa o nga taupū
  2. 1117 - Mena ka tutuki tetahi konae i roto i te roopu roopu konae ki nga whakaritenga paepae whakatipu-aunoa, ka tipu katoa nga konae kei te roopu roopu.
  3. 1118 - Whakahauhia nga mea katoa kia noho ki nga waahi rereke (ka aukati i nga waahanga whakauru), ka whakaiti i te hiahia ki te matawai i te wharangi SGAM, e whakamahia ana ki te whai i nga whanui whakauru.
  4. 1224 - Ka whakakorehia te pikinga maukati i runga i te maha o nga raka. Heoi, ko te nui o te whakamahi mahara ka taea te piki haere o te maukati
  5. 2371 - Hurihia te paepae whakahōu tatauranga aunoa ki te paepae whakahōu tatauranga aunoa. He mea nui mo te whakahou i nga mahere patai mo nga ripanga nui, na te he o te tatau o nga rekoata ka hua he mahere mahi.
  6. 3226 - Ka pehia nga karere angitu i roto i te raarangi hapa
  7. 4199 - Kei roto ko nga huringa ki te arotau patai i tukuna i roto i nga CU me nga Puka Ratonga SQL Server
  8. 6532-6534 - Kei roto ko nga whakapainga mahi mo nga mahi uiui mo nga momo raraunga mokowā
  9. 8048 - Hurihia nga mea mahara kua wehewehea a NUMA ki nga mea kua wehea te PTM
  10. 8780 - Ka taea te tohatoha wa taapiri mo te whakamahere patai. Ko etahi o nga tono karekau he haki nei ka paopaohia na te mea karekau he mahere patai (he pepeke onge)
  11. 8780 - 9389 - Whakahohehia etahi atu putunga mahara tuku hihiko mo nga korero aratau puranga, ka taea e te kaiwhakahaere aratau puranga te tono mahara taapiri me te karo i te neke raraunga ki tempdb mena kei te waatea etahi atu mahara

I mua ano i te tau 2016, he pai ki te whakaahei i te haki haki 2301, e taea ai te whakapai ake i te tautoko i nga whakatau, ka awhina i te whiriwhiri i nga mahere patai tika ake. Heoi, mai i te putanga 2016, he maha nga wa ka pa te kino ki nga wa roa o te mahi patai.
Ano hoki, mo nga punaha he maha nga tohu (hei tauira, mo nga papaaarangi 1C), ka tūtohu ahau kia taea te haki tohu 2330, ka whakakorehia te kohinga o te whakamahi tohu, he pai te paanga ki te punaha.
Mo etahi atu korero mo nga haki tohu, tirohia konei
Mai i te hononga i runga ake nei, he mea nui ano kia whai whakaaro ki nga putanga me te hanga o te MS SQL Server, mo nga putanga hou ake, ka taea e etahi haki tohu ma te taunoa, kaore ranei he painga.
Ka taea e koe te whakaka me te whakaweto i te haki tohu me nga whakahau DBCC TRACEON me DBCC TRACEOFF. Mo etahi atu korero tirohia konei
Ka taea e koe te tiki i te mana o nga haki tohu ma te whakamahi i te whakahau DBCC TRACESTATUS: nui atu nga korero
Kia whakaurua nga haki tohu ki roto i te tiimata-aunoa o te ratonga MS SQL Server, me haere koe ki te Kaiwhakahaere Whirihoranga Tūmau SQL me te taapiri i enei haki tohu ma te -T ki nga taonga ratonga:
Ko etahi waahanga o te tirotiro a MS SQL Server. Nga Aratohu mo te Whakatakoto i nga Kara Tohu

Ngā putanga

I roto i tenei tuhinga, i tātarihia etahi ahuatanga o te tirotiro i te MS SQL Server, me te awhina ka taea e koe te tautuhi tere i te kore o te RAM me te wa PTM kore utu, me etahi atu raruraru iti ake. Kua arotakehia nga haki tohu e whakamahia nuitia ana.

Kaupapa:

» Nga tatauranga tatari a SQL Server
» Ko nga tatauranga tatari a SQL Server, tena koa korero mai ki ahau kei hea te mamae
» Tirohanga pūnaha sys.dm_os_schedulers
» Ma te whakamahi i te Zabbix ki te Aroturuki i te Raraunga Raraunga MS SQL Server
» SQL Lifestyle
» Kara Kara
» sql.ru

Source: will.com

Tāpiri i te kōrero