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
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:
- 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' );
- 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:
I konei me aro koe ki nga tawhā e whai ake nei:
- 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)
- Paepae Utu mo te Whakarara - utu tata mo te whakarara (ko te 5 te taunoa)
- 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:
- tuatahi monohia te whakarara ma te whakarite i te Waeine Whakarara-a-whanui-a-taataki ki te 1
- tātarihia nga tono tino taumaha ka kowhiria te maha o nga miro pai mo ratou
- 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
- 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:
- tātarihia nga tono tino taumaha ka kowhiria te maha o nga miro pai mo ratou
- 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
- 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:
- 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ū
- 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.
- 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.
- 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
- 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.
- 3226 - Ka pehia nga karere angitu i roto i te raarangi hapa
- 4199 - Kei roto ko nga huringa ki te arotau patai i tukuna i roto i nga CU me nga Puka Ratonga SQL Server
- 6532-6534 - Kei roto ko nga whakapainga mahi mo nga mahi uiui mo nga momo raraunga mokowā
- 8048 - Hurihia nga mea mahara kua wehewehea a NUMA ki nga mea kua wehea te PTM
- 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)
- 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
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
Ka taea e koe te tiki i te mana o nga haki tohu ma te whakamahi i te whakahau DBCC TRACESTATUS:
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:
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:
»
»
»
»
»
»
»
Source: will.com