éçšããŒã ã¯ãããŒããããç°å¢ã§ã®Microsoft SQLã®çµéšãé ãããªããªããšèããããããã®èšäºãèªçããŸããã ãã®äžã§ããã®DBMSãå®éã«äœ¿çšããéã®ãã¥ã¢ã³ã¹ã«ã€ããŠèª¬æããŸãã
Microsoft SQL Serverã¯é·ãéYandex.Money補åãã¡ããªã«äœçœ®ä»ããããŠãããå€ãã®åå¥ã®ãµãŒãã¹ãããã¹ãŠã®æäœã«é¢ããç°çš®æ å ±ãåéããåé¡ã解決ããŠããŸãã ãã®ãããªã¢ã»ã³ããªããªããã°ãæ¯æãã远跡ããããçµ±èšãåéããããåé¡ã解決ãããããããšã¯äžå¯èœã§ãã
äžèšã®ãã¹ãŠã¯ãMicrosoft SQL Server 2012-2014ã¢ããªãã£ã¯ã¹ã®é«éã§æ£ç¢ºãªäœæ¥ãéèŠãã倧èŠæš¡ããŒã¿ããŒã¹ã®ç®¡çè ã«åœ¹ç«ã¡ãŸãã
æ å ±ãããªãã«ãšã£ãŠæçšã§èå³æ·±ããã®ã§ããããšãããã£ãå Žåã¯ãèè ããªã©ãã¯ã¹ããªãããã«ã³ã¡ã³ãã§ç¥ãããŠãã ããã
ç§ã®ååã¯Slavaã§ããYandex.Moneyã®Microsoft SQL Server管çã°ã«ãŒãã®è²¬ä»»è ã§ãã
ããŒãžã§ã³6.5ãããã®DBMSã䜿çšããŠãããMS SQL 7-2000ã§ã¯20ã30å°ã®ãµãŒããŒçšã®ç£èŠã·ã¹ãã ãäœæããŸãã ã MS SQL 2005ã®ãªãªãŒã¹ãšDMOããSMOãžã®ç§»è¡ã®åŸã ç£èŠãå®å šã«æžãçŽããŸãã ã
Yandex.MoneyããŒã -2012幎æ«ããã
ããã«ç解ããããã«ãç§ãã¡ã®ããŒã¿ã¹ãã¬ãŒãžã·ã¹ãã ã®ã¢ãŒããã¯ãã£ã«ã€ããŠå°ã説æããŸãã Yandex.Moneyæ¯æãã·ã¹ãã ã®åã³ã³ããŒãã³ãã¯ãæ¯æãã«é¢ããç¬èªã®æ å ±ã®ã¿ãç¥ã£ãŠãããããäœããã®æ¹æ³ã§å®æçã«ãã¹ãŠã®ã³ã³ããŒãã³ãããæ å ±ãåéããéçŽããŠé¢ä¿ãç¹å®ããå¿ èŠããããŸãã
ãããã®ããŒã¿ãããæ°çŸã®æž¬å®å€ãæã€ãã¥ãŒããæ¯æ¥æ§ç¯ãããã¬ããŒããšã¬ãžã¹ã¿ãçæããã調æŽãè¡ãããŸãã ãã®åŸããcombedãããŒã¿ããŠãŒã¶ãŒãšéèã·ã¹ãã ã«æäŸãããããã«äœæ¥ãè¡ãããŸãã 匷åãªçµ±åãµãŒãã¹ãšETLããã»ã¹ïŒæœåº-å€æ-ããŒãïŒãåããMicrosoft SQL Serverã¯ããããã®ã¿ã¹ã¯ã«æé©ã§ããã
ãŸãã Analysis Servicesãç©æ¥µçã«äœ¿çšããŠOLAPãã¥ãŒããæ§ç¯ããŠããŸã ã ã¢ããªã¹ããæè³å®¶ã補å管çè ãå¹¹éšãç°¡åã«äœ¿çšã§ããã¹ã©ã€ã¹ã䜿çšããŠãå€æ¬¡å 圢åŒã®ããŒã¿ãæäŸããŸãã
埮现ãªãªã¯ãšã¹ãã1æéã§æ©èœããçç±
ããã®æãäžè¬çãªçç±ã¯ãå€ãçµ±èšïŒããŒãã«åã®ç¶æ ã«é¢ããæ å ±ïŒã§ããããã®çµæãæé©ãªèšç»ã§ã¯ãããŸããã
ããŒã¿ããŒã¹ãžã®ã¯ãšãªãå®è¡ãããšããå®è¡èšç»ã¯å®è¡ãããæäœã®ãœãŒãããããªã¹ãããæ§ç¯ãããŸãã ç¹å®ã®æäœãéžæãããšãå¥ã®ã³ã³ããŒãã³ããã¯ãšãªãªããã£ãã€ã¶ãŒãããããŒã¿ããŒã¹ããŒãã«ã®åã®å€ã®ååžãèšè¿°ããéèŠãªå ¥åããŒã¿ããçµ±èšãåºå¥ããŸãã
ãã®ãããªèŠçŽ æ°ã®èŠç©ããã«ãããã¯ãšãªãªããã£ãã€ã¶ãŒã¯å€ããå°ãªããæé©ãªå®è¡ãã©ã³ãæ§ç¯ã§ããŸãã ãããã£ãŠãæ代é ãã®çµ±èšã¯å šäœãå°ç¡ãã«ããŸãã
è©äŸ¡ãæ£ãããªããšãTempDBãžã®è»¢éã«å²ãåœãŠãããã¡ã¢ãªãäžè¶³ããããããã£ã¹ã¯I / Oæäœãéå°ã«ãªãå¯èœæ§ããããŸãã ããã«ãDBMSã¯ã䞊åå®è¡ãã©ã³ã®ä»£ããã«é 次å®è¡ãã©ã³ãéžæã§ããŸãããããã¯ãèããããçµæã®äžéšã«ãããŸããã
çµ±èšã®æŽæ°ã®èªååã«é¢ãã Habré ã«é¢ããèšäºã¯ãã§ã«ãããŸãããããã£ãŠããã®ç¹ã«ã€ããŠã¯è©³ãã説æããŸããã ãã ããçµ±èšã®æŽæ°ã¯æéãšè² è·ã®ãªãŒããŒãããã«ãªãå¯èœæ§ããããããŒãã«å ã®ããŒã¿ã¯çµ±èšã®æŽæ°ãããéãå€åãããããçµæã¯äžå®å®ã«ãªãå¯èœæ§ããããŸãã ãã®ãããªå Žåããã¬ãŒã¹ãã©ã°ãã°ããŒãã«ã«ãªã³ã«ããã ãã§ãçµ±èšãæŽæ°ããããã®20ïŒ ã®ãããå€ããããŒãã«ã®å€æŽã®åçã«å€åããå²åã«å€æŽãããŸãã
DBCC TRACEON (2371,-1)
ãã©ã°ãæå¹ã«ãããšãè¡æ°ãå¢å ããã«ã€ããŠçµ±èšãããé »ç¹ã«æŽæ°ãããŸãã
ããã¯å€§ãã«åœ¹ç«ã¡ãŸããã10åè¡ä»¥äžã®ããŒãã«ã§ã¯ãéåžžã®èšç»ã«ãããããããããã»ã¹ãéåžžã«é ããªãå ŽåããããŸãã
ãã®å Žåãçµ±èšã®éåææŽæ°ãæå¹ã«ãããšæ¬¡ã®ããšãã§ããŸãã
ALTER DATABASE dbName SET AUTO_UPDATE_STATISTICS_ASYNC ON
çµ±èšã®æŽæ°äžãSQLã¯ããã»ã¹ãå®äºããã®ãåŸ ããã«æ©èœãç¶ããŸãã ãã¹ãã«ãããšããã®ãªãã·ã§ã³ãæå¹ã«ããªãããŒã¿ããŒã¹ã¯ãšãªã¯éåžžã«äžå®å®ã§ãã ãã®å®éšãèªåã§è©ŠããŠãã ããã
ãã ããé©åãªèšç»ãšææ°ã®çµ±èšã䜿çšããŠããã¯ãšãªã®å®è¡ã«åå äžæã®é 延ãçºçããå ŽåããããŸãã ç§ã®çµéšã§ã¯ãïŒééã£ãèšç»ã®åŸã®ïŒããã®æãäžè¬çãªçç±ã¯ãèŠæ±ããããªãœãŒã¹ã®æ£åŒãªäžè¶³ã®ããã«å®è¡ã®ããã«ãã¥ãŒã«ãã£ããµãŒããŒèŠæ±èŠæ±ã§ããã
ã¡ã¢ãªãŒã«è²ªæ¬²ãª5ã€ä»¥äžã®ã¯ãšãªãåæã«èµ·åããããã©ã«ãã§ãçæãã®å¶éã25ïŒ ã«ãããšãæåã®4ã€ã«ã¯ãã¹ãŠã®ã¡ã¢ãªãŒãäžããããŸãã æ®ãã®ãªã¯ãšã¹ãã¯ã RESOURCE_SEMAPHOREã€ã³ãžã±ãŒã¿ãŒã§ã®ã¿ãã¥ãŒã«å ¥ããããã¡ã¢ãªã解æŸãããã®ãåŸ ã¡ãŸãã
䜿çšå¯èœãªãµãŒããŒRAMã®çŽååãèŠæ±ã®å®è¡ã«äœ¿çšãããŸãã RAMã128 GBãè¶ ããã·ã¹ãã ã§ã¯ã25ïŒ ãéåžžã«éèŠã§ãã
ç§ã®èŠ³å¯ã«ãããšãã¯ãšãªã¯å²ãåœãŠãããã¡ã¢ãªã®20ã80ïŒ ã䜿çšããªãã ãã§ããããã¯ããªã¯ãšã¹ãã®æäœäžã«ã³ãã³ããå®è¡ãããšå®å šã«è¡šç€ºãããŸãã
select * from sys.dm_exec_query_memory_grants
ã³ãã³ããå®è¡ããåŸãããã»ã¹ã§çºçããå ŽåãããŒã¿ããŒã¹ã§çŸåšåŠçãããŠããã¯ãšãªãšãªãœãŒã¹ã®æåŸ å€ã衚瀺ãããŸãã
ãã¹ãããŒã¿ããŒã¹ã®1ã€ã§ãªã¯ãšã¹ããåŠçããçµæã
èŠæ±ã¯9 GBãèŠæ±ããŠåä¿¡ããŸãããã10ïŒ ãã䜿çšããŸããã§ããã ideal_memory_kbãã£ãŒã«ãã«æ³šæããŠãã ãã -ãªã¯ãšã¹ãã®æªå®çŸã®å€¢ã¯ä¿®æ£ãããŠããŸãã
Resource Governorã䜿çšããŠã¯ãšãªãå®è¡ãããšãã«ãç¡é§ãªã¡ã¢ãªæ¶è²»ãå¹ççã«åŠçã§ããŸãã CPU䜿çšéãšã¡ã¢ãªäœ¿çšéã«å¶éãèšå®ã§ããŸãã
sp_WhoIsActiveã¹ãã¢ãããã·ãŒãžã£ã®äœ¿çšããå§ãããŸã ã åçè¡šçŸïŒDMVïŒãä»ããŠãµãŒããŒã¹ããŒã¿ã¹æ å ±ãåéããŸãã éåžžã«ã·ã³ãã«ã§åŒ·åãªããŒã«ã
ãã®ãã©ã¡ãŒã¿ãŒã»ããã§sp_WhoIsActiveããã·ãŒãžã£ã䜿çšããŸãã
sp_whoisactive @not_filter = 'ReportServer', @not_filter_type = 'database', @get_plans=1, @find_block_leaders = 1, @get_task_info = 2, @get_additional_info=1--, @get_locks = 1
ãã®ãããªãªã¯ãšã¹ãã¯ãéå°ãªè² è·ãããã£ããšãã«ã¢ã¯ãã£ããªãªã¯ãšã¹ãã芳å¯ããã ãã§èå¥ã§ããŸãã ãŸãã5ã10åããšã«sys.dm_exec_query_memory_grantsã¯ãšãªããselect *ãå®è¡ããçµæãããŒãã«ã«ä¿åããã¿ã¹ã¯ãäœæããããšãã§ããŸãã grant_memory_kbãšmax_used_memory_kbã®éãã«ãããåèšå€ãåæããåé¡ã®ããã¯ãšãªãèŠã€ããããšãã§ããŸãã
次ã«ãå¿ èŠä»¥äžã«ã¡ã¢ãªã䜿çšããæ¥ç¶ãç¹å®ããResourceGovernorã䜿çšããŠãã¡ã¢ãªã80ïŒ ã§ã¯ãªã10-20ïŒ ã®ããŒãžã³ã§å²ãåœãŠãããŠããã°ã«ãŒãã«æ¥ç¶ããªãã€ã¬ã¯ãããå¿ èŠããããŸãã
REQUEST_MAX_MEMORY_GRANT_PERCENTãã©ã¡ãŒã¿ãŒã®å€ïŒäœ¿çšå¯èœãªã¡ã¢ãªãŒã®å²åãšããŠèšå®ïŒã¯ã次ã®ã¹ã¯ãªããã䜿çšããŠèšç®ã§ããŸãã
SELECT res.name, sem.target_memory_kb /1024 as target_memory_Mb, sem.available_memory_kb / 1024 as available_memory_MB, sem.granted_memory_kb/1024 as granted_memory_Mb, sem.used_memory_kb / 1024 as used_memory_Mb, sem.grantee_count, sem.waiter_count FROM sys.dm_exec_query_resource_semaphores sem join sys.resource_governor_workload_groups res on sem.pool_id = res.pool_id where sem.resource_semaphore_id =0
ãã®çµæããµãŒããŒãã¯ãšãªããã³è¿œå ãŸãã¯æ§æããåã°ã«ãŒãçšã«äœ¿çšã§ããã¡ã¢ãªéã決å®ã§ããŸãã
äžèšã®ãã¹ãŠã®æäœã®åŸãèŠæ±ãã¡ã¢ãªå²ãåœãŠãåã«åŸ æ©ããäœãããªããšããæå°éã®ç¶æ³ã§ãèŠæ±éã®ã¡ã¢ãªã®åæ£ãããå¹ççã«ãªããŸãã
䜿çšäžã®ããŒã¿ããŒã¹ã§ã®AlwaysON
ããŒã¿ããŒã¹ã®é«å¯çšæ§ç°å¢ã§ããAlwaysONã®é·æãšçæã¯ãæ ãè ã«ãã£ãŠã ãæžããããã®ã§ã¯ãããŸããã ãã ãããã©ãã€ãã®ããŒã¿ããŒã¹ã«å¯Ÿãããã®æè¡ã®å®éã®äœ¿çšã«é¢ããæ å ±ã¯ããã»ã©å€ããããŸããã 2013幎ã«Yandex.Moneyã«é«å¯çšæ§ã°ã«ãŒããå°å ¥ãããšããè»äºç°å¢ã§ã®å®éã®éçšã«é¢ããæ å ±ãããããŸããã§ããã åœæã®ã¡ã€ã³ããŒã¿ããŒã¹ã¯çŽ4 TBãã䜿çšããŠããªãã£ããããå€ãã®ããšãèªåã§è¡ãå¿ èŠããããŸããã
é«å¯çšæ§ã¯ã©ã¹ã¿ãŒã¯ã192 GBã®ã¡ã¢ãªããµãŒããŒããšã«SASãã£ã¹ã¯ãåãã2ã€ã®ãã·ã§ã«ãããSATAãã©ã€ãã䜿çšããããã¯ã¢ããçšã®åå¥ã®ã·ã§ã«ããTEAMã®4ã®ã¬ãããã€ã³ã¿ãŒãã§ã€ã¹ã®ãããã¯ãŒã¯ã®2ã€ã®ããŒãã§æ§æãããŸããã
4幎éã§ããã®ããŒã¿ããŒã¹ã®ããªã¥ãŒã ã¯20 TBã«å¢å ããããããµãŒããŒã¯æ°ããè² è·ã«ã»ãšãã©å¯ŸåŠã§ãããã€ã³ããã¯ã¹ã®æé©åã«ããã以äžã§èª¬æããè¿œå ã®åé¡ãçºçããŸããã ãããã¯ãŒã¯çµç±ã§ãã¥ãŒããåŠçããéã®ããŒã¿ããŒã¹ããã©ãŒãã³ã¹ã¯ãã¯ã©ã¹ã¿ãŒãå¥ã®åŒ·åãªã¹ã€ããã«è»¢éããããŸã§ããã©ãã£ãã¯ããããã¯ãŒã¯å ã®ä»ã®ã³ã³ããŒãã³ãã«å¹²æžããã»ã©ã§ããã
ããŒã¯æã«ã¯ãããŒãããäºãã倱ãã2çªç®ã®ããŒãã®ããŒã¿ããŒã¹ãåæãããïŒã¯ã©ã¹ã¿ãŒã¯ã©ãŒã©ã ã«ããã«ã¡ã¯ïŒãã€ã³ãã«ãªããŸããã ããããããã¯æ°ãããããã¯ãŒã¯ã«ãŒãã®è¿œå ã«ãã£ãŠè§£æ±ºãããŸããã ãããŠãæ°ãããã·ã³ã§ã¯ãããã«10 GBã®ã«ãŒããå ¥ããŸããã
ãªã¹ããããã¢ãŒããã¯ãã£äžã®åé¡ãé€ããŠãAlwaysONãã¯ãããžã®äžè¬çãªå°è±¡ã¯è¯å®çã§ãã
ããŒãéã®ãã©ãã£ãã¯ã¯80ã90ïŒ ã«å§çž®ãããŸãã
èªã¿åãå°çšïŒROïŒã¬ããªã«ã¯ãé·æéã·ã£ããããŠã³ãããšããã«åæãããµãŒãã¹ã«æ»ããŸãã
ããŒã¿ããŒã¹ããã¹ãç°å¢ã«è€è£œããã«ã¯ã ãã°é åž ïŒãã©ã³ã¶ã¯ã·ã§ã³ãã°ã®é ä¿¡ïŒãæåã¢ãŒãã§äœ¿çšã§ããŸãã
- AlwaysONã¯éåžžã«ä¿¡é Œã§ããŸãããWindows Serverãã§ãŒã«ãªãŒããŒã¯ã©ã¹ã¿ãªã³ã°ïŒWSFCïŒãã¯ã©ãã·ã¥ããAlwaysONã°ã«ãŒãããã«ããããšããããŸãã
ã¯ã©ã¹ã¿ãªã³ã°ãµãŒãã¹ã®äžåçãªæ±ºå®ã®æ°ãæå°éã«æããŠã2ã€ã®ããŒããæã€æ§æã§ã¯ã©ã¹ã¿ãŒãæ¶æ» ãããããã«ãã»ã«ã³ããªããŒãã®é³å£°ã匷å¶çã«å¥ªããœãªã¥ãŒã·ã§ã³ãéçºããŸããã
Import-Module FailoverClusters $node = "Srv1" (Get-ClusterNode $node).NodeWeight = 0
ãã®ãããªãã©ã¡ãŒã¿ã䜿çšãããšãã»ã«ã³ããªããŒãã§ã®äœæ¥äžã«ç©ããã«ãªããŸãã
AlwaysONã°ã«ãŒããåæããŠããªã
AlwaysONã°ã«ãŒãã§è² è·åæ£ãè¡ã倧èŠæš¡ãªããŒã¿ããŒã¹ã®æäœäžã«ãã¡ã€ã³ããŒããšã»ã«ã³ããªããŒãã®åæãçºçããå ŽåããããŸãã ã¡ã€ã³ããŒãã§åæã«æŽæ°ãããŠããããŒãã«ã«å¯ŸããŠROããŒãã§é·ãSELECTæäœãå®è¡ãããšãå€æŽãã°ãã§ãŒã³ïŒLSNïŒã®å埩ããããã¯ãããŸãã éåæã¯ãã¹ãŠã®ããŒãã«ã«åœ±é¿ããã¯ãšãªãå®è¡ãããŠããéãä¿æãããŸãããã®æç¹ã§ãã¬ããªã«äžã®ããŒã¿ããŒã¹ã®ããŒã¿ã¯ç¡é¢ä¿ã«ãªããŸãã
éåžžãéåæã®æãããªå åã¯ãããŸãããã saãšããŠèµ·åãããèªã¿åãå°çšããŒãã«æ°ããããã»ã¹ã衚瀺ãããŸãã ã«ã¹ã±ãŒãããã¯ãé »ç¹ã«çºçããŸããããã¯ãäžèšã®sp_whoisactiveããã·ãŒãžã£ã䜿çšããŠãã°ããæ€åºã§ããŸãã
ãã®çç±ã¯ãSelectãåé¢ã¬ãã«READ COMMITTEDïŒã€ãŸããããã©ã«ãå€ïŒã§å®è¡ãããŠããããšã«ãããŸãã
解決çãšããŠãã¯ãšãªèªäœã§WITHïŒNOLOCKïŒãã©ã¡ãŒã¿ã䜿çšããããããŒã¿ããŒã¹ãŸãã¯ã»ãã·ã§ã³ã®åé¢ã¬ãã«ãSNAPSHOTã«å€æŽããŠãããŒãã«ãžã®é·ãã¯ãšãªã¯ãšãªäžã«ãããåé¢ã§ããŸãã
ãŠãŒã¶ãŒã®åã«åæãå€ããŠããããšãç¥ãããã«ãç£èŠçšã®ã¹ã¯ãªããã䜿çšããŸãã 5åã«1åãåæã®ã¹ããŒã¿ã¹ã確èªããåé¡ãçºçããå Žåã«é»åã¡ãŒã«ãéä¿¡ããŸãã
declare @Delay int set @Delay = 2 select * into #tmpag_availability_groups from master.sys.availability_groups select group_id, replica_id,replica_server_name,availability_mode into #tmpdbr_availability_replicas from master.sys.availability_replicas select replica_id,group_database_id,database_name,is_database_joined,is_failover_ready into #tmpdbr_database_replica_cluster_states from master.sys.dm_hadr_database_replica_cluster_states select * into #tmpdbr_database_replica_states from master.sys.dm_hadr_database_replica_states select replica_id,role,is_local into #tmpdbr_availability_replica_states from master.sys.dm_hadr_availability_replica_states select ars.role, drs.database_id, drs.replica_id, drs.last_commit_time into #tmpdbr_database_replica_states_primary_LCT from #tmpdbr_database_replica_states as drs left join #tmpdbr_availability_replica_states ars on drs.replica_id = ars.replica_id where ars.role = 1 SELECT --'<tr><td align="center">' + AR.replica_server_name + '- ' + AG.name + ' ' + dbcs.database_name + '</td>' AS SRV_AG_DB, AR.replica_server_name + '- ' + AG.name + ' ' + dbcs.database_name AS SRV_AG_DB, --CASE dbcs.is_failover_ready WHEN 1 THEN 0 ELSE ISNULL(DATEDIFF(ss, dbr.last_commit_time, dbrp.last_commit_time), 0) END AS [EstimatedDataLoss], --'<td align="center">' + Cast(ISNULL(dbr.last_redone_time, 0) AS varchar(50)) + '</td>' As LastRedoneTime , Cast(ISNULL(dbr.last_redone_time, 0) AS varchar(50)) As LastRedoneTime , --'<td align="center">' + Cast((CASE dbcs.is_failover_ready WHEN 1 THEN 0 ELSE ISNULL(DATEDIFF(ss, dbr.last_commit_time, dbrp.last_commit_time), 0) END)as nvarchar(10)) + '</td>' AS [EstimatedDataLoss2], Cast((CASE dbcs.is_failover_ready WHEN 1 THEN 0 ELSE ISNULL(DATEDIFF(ss, dbr.last_commit_time, dbrp.last_commit_time), 0) END)as nvarchar(10)) AS [EstimatedDataLoss2], --'<td align="center">' + Cast(ROUND(ISNULL(CASE dbr.redo_rate WHEN 0 THEN -1 ELSE CAST(dbr.redo_queue_size AS float) / dbr.redo_rate END, -1),-1) as nvarchar(10)) + '</td> </tr>' AS [EstimatedRecoveryTime] Cast(ROUND(ISNULL(CASE dbr.redo_rate WHEN 0 THEN -1 ELSE CAST(dbr.redo_queue_size AS float) / dbr.redo_rate END, -1),-1) as nvarchar(10)) AS [EstimatedRecoveryTime] INTO #tt FROM #tmpag_availability_groups AS AG INNER JOIN #tmpdbr_availability_replicas AS AR ON AR.group_id=AG.group_id INNER JOIN #tmpdbr_database_replica_cluster_states AS dbcs ON dbcs.replica_id = AR.replica_id LEFT OUTER JOIN #tmpdbr_database_replica_states AS dbr ON dbcs.replica_id = dbr.replica_id AND dbcs.group_database_id = dbr.group_database_id LEFT OUTER JOIN #tmpdbr_database_replica_states_primary_LCT AS dbrp ON dbr.database_id = dbrp.database_id INNER JOIN #tmpdbr_availability_replica_states AS arstates ON arstates.replica_id = AR.replica_id WHERE --(AG.name='Nastro') and ISNULL(CASE dbr.redo_rate WHEN 0 THEN -1 ELSE CAST(dbr.redo_queue_size AS float) / dbr.redo_rate END, -1) > @Delay --(AG.name=@AGN) and ISNULL(CASE dbr.redo_rate WHEN 0 THEN -1 ELSE CAST(dbr.redo_queue_size AS float) / dbr.redo_rate END, -1) > @Delay IF EXISTS (SELECT * from #tt) BEGIN declare @tableHTML nvarchar(max) set @tableHTML =N'<H3><FONT SIZE="3" FACE="Tahoma">AlwaysOn Status </FONT></H3>' set @tableHTML = @tableHTML +N'<table border="1" bgcolor=D7D1F8>' + -- change the background color if you want N'<FONT SIZE="2" FACE="Calibri">' + N'<tr><th align="center">Server Group DB</th>' + N'<th align="center">LastRedoneTime</th>' + N'<th align="center">EstimatedDataLoss</th>' + N'<th align="center">EstimatedRecoveryTime</th>' + N'</tr>' + ISNULL(CAST ( ( SELECT * from #tt FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) ),'') + N'</FONT>' + N'</table>' ; --send email EXEC msdb.dbo.sp_send_dbmail @profile_name = 'mail', -- change here !! @recipients='Admin1@yandex.ru;Admin2@yandex.ru', -- change here !! @subject = 'AlwaysON Report', @body = @tableHTML, @body_format = 'HTML' ; END DROP TABLE #tmpdbr_availability_replicas DROP TABLE #tmpdbr_database_replica_cluster_states DROP TABLE #tmpdbr_database_replica_states DROP TABLE #tmpdbr_database_replica_states_primary_LCT DROP TABLE #tmpdbr_availability_replica_states drop table #tmpag_availability_groups SELECT * from #tt drop table #tt
åæ解é€ã®ãã1ã€ã®äžè¬çãªåå ã¯ãã€ã³ããã¯ã¹ã®ã¡ã³ããã³ã¹ã§ãã ããšãã°ã500 GBã®å®¹éãæã€ããŒãã«ã§ã¯ã©ã¹ã¿ãŒã€ã³ããã¯ã¹ãåæ§ç¯ãããšã10æéã®åæãåããªããªããŸããã
ãã®æéãæå°åããæãç°¡åãªæ¹æ³ã¯ãã€ã³ããã¯ã¹ãäœæãŸãã¯åæ§ç¯ãããšãã«MAXDOPãªãã·ã§ã³ã䜿çšããããšã§ãã éåžžã10ã20 GBã®ã€ã³ããã¯ã¹ã«ã¯ã2ããããããå°ããªã4ãã«ã¯å€ã2ããèšå®ããŸãã
èªã¿åãå°çšèŠæ±ã«ãŒãã£ã³ã°
èªã¿åãå°çšããŒã¿ããŒã¹ã¬ããªã«ããã®èªã¿åãèŠæ±ã®ãã¥ã¢ã³ã¹ã¯ãæ¥ç¶æååã§ApplicationIntent = ReadOnlyãæå®ããã ãã§ã¯ååã§ã¯ãªãããšã§ãã ã«ãŒãã£ã³ã°ãæ§æããå¿ èŠããããŸã ã ãã¡ããããã®èšå®ã¯ãäžåºŠæ§æãããšã¿ããããªããªããã®ã«é©çšãããŸãããHisäžã®ãã£ã³ã¹ã¯ç Žããããã®ãããªã¹ããŒã ã¯ãããŸããã ããšãã°ãäœæ¥ã®éçšã§ãã¬ããªã«ROããã¡ã€ã³ãªã¯ãšã¹ãã«ãªã¯ãšã¹ãããªãã€ã¬ã¯ãããå¿ èŠãããå ŽåããããŸãã
ãããè¡ãã«ã¯ãã¬ããªã«èªäœã®èšå®ã䜿çšããROãžã®ãªã¯ãšã¹ããåã«çŠæ¢ããŠããŸããã ããããã¬ããªã«èšå®ãåãæ¿ãã次ã®æ©èœã®ããã«ãããã€ãã®äžå¿«ãªç¶æ³ã®åŸãã¢ãããŒããå€æŽããå¿ èŠããããŸããã
åãæ¿ãã¯å°é£ã§ãããçŸåšã®ROèŠæ±ã¯å€±ãããŸããããããã»ã©ã¯ãŒã«ã§ã¯ãããŸããã
- ãã©ãã£ãã¯ãROã«è¿ããããšããã¹ãŠã®ãªã¯ãšã¹ãããããããã®hadr_sync_commitã€ã³ãžã±ãŒã¿ãŒã§ãããã¯ãããããšããããããŸããã ãããŠä»ãããã¯ãŸã£ããé¢çœããããŸããããªããªãããã³ã°ããŠããéã¯ã³ããããè¡ãããªãããã§ãã ã¬ããªã«ãæ£èŠåããããŸã§ãã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã®æ¥ç¶ã¢ãã¬ã¹ãå€æŽããå¿ èŠããããŸããã
åŸã§ãã«ãŒãã£ã³ã°ã®å€æŽãéããŠROèŠæ±ããªãã€ã¬ã¯ãããæ¹ãæ£ããããšãå€æããŸããã
次ã«ã2ããŒãã®åæ£è² è·æ§æã®äŸã瀺ããŸãã
ALTER AVAILABILITY GROUP [AGGroupName] MODIFY REPLICA ON N'PrimaryDB01â² WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SecondaryDB01','PrimaryDB01'))); -- , RO SecondaryDB01 ALTER AVAILABILITY GROUP [AGGroupName] MODIFY REPLICA ON N'PrimaryDB01â² WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('PrimaryDB01'))); -- PrimaryDB01;
ã«ãŒãã£ã³ã°ãå€æŽããããã»ã¹ã§ã¯ããªã¯ãšã¹ãã¯éåžžââå®äºãã次ã®ãªã¯ãšã¹ãã¯ã¡ã€ã³ã®ã¬ããªã«ã«çŽæ¥éãããŸãã
ã·ã¹ãã ã®åäœã®4幎éã§ãROã¬ããªã«ã®é害ã1åçºçããŸããã ããŒã¿ãã¡ã€ã«ã«CRCãšã©ãŒãããã»ã¯ã·ã§ã³ã®1ã€ãèœã¡ãŸããã ã¡ã€ã³ããŒãã¯åŒãç¶ãæ©èœããŸããããROã¬ããªã«ã«ã¯ããŒã¹ããããŸããã
ROããŒãã®åºæ¬ã¬ãã«ã§ã®é害åŠçãšã¡ã€ã³ããŒããžã®èªåãã©ãã£ãã¯ã¹ã€ããã³ã°ã¯ãåãã«ãŒãã£ã³ã°ã䜿çšããŠå®è£ ã§ããŸãã
ããŒã¿ããŒã¹å ã®ä»»æã®ããŒãã«ãžã®ã¯ãšãªã䜿çšããŠã¿ã¹ã¯ãäœæããŸãã
èŠæ±ããšã©ãŒã§å®äºããå Žåãåãæ¹æ³ã§ã¡ã€ã³ããŒãã®ããŒã¿ããŒã¹ã確èªããŸãã
- ã¡ã€ã³ããŒãã§ãã¹ãŠåé¡ãªããã°ããã©ãã£ãã¯ãåãæ¿ããŸãã é±æ«ãŸãã¯å€ã«ãããã¯ããªããè¯ãå€ã®ç¡ç ãåŸãŠãæ°é®®ãªå¿ã§åé¡ã«å¯ŸåŠããããšãå¯èœã«ããŸãã
ãã®ãããªé害ãçºçããåŸã®ããŒã¿ããŒã¹ã®åŸ©å ã«ã€ããŠã¯ãå¯çšæ§ã°ã«ãŒããã倧ããªããŒã¿ããŒã¹ãåé€ãïŒã¡ã€ã³ããŒãã§ã¯ãªã¹ããŒãä»ããŠãåäœãç¶ããŸãïŒãé埩æ§ã¢ãŒãã§èªã¿åãå°çšããŒãã«ããã¯ã¢ããã埩å ããæ¹ãç°¡åã§ãã 次ã«ã埩å ããããŒã¿ããŒã¹ãåå å°çšã¢ãŒãã®å¯çšæ§ã°ã«ãŒãã«è¿œå ããŸãã
è¿œå ïŒ
ã¢ããªã±ãŒã·ã§ã³ãé
ããSSMSãéã...-ãªã³ã¯AlanDentonãããããšã