ããã«ã¡ã¯ãZOZOãã¯ãããžãŒãºã®å»£ç¬ã§ãã åŒç€Ÿã§ã¯ãµãŒãã¹ã®äžéšã«SQL Serverã䜿çšããŠããŸããå
æ¥ããæ®æ®µã¯æ°10ããªç§ã§å®è¡å®äºããã¯ãšãªããããŸã«5ç§éå®è¡ããç¶ããŠæçµçã«ã¿ã€ã ã¢ãŠãããã®ã§èª¿æ»ããŠæ¬²ããããšããäŸé ŒãåããŸãããèª¿æ»æ¹æ³ãæŽçããŠæçµçã«åå ã®ç¹å®ãšã¿ã€ã ã¢ãŠãçºçã®é²æ¢ãŸã§å®çŸã§ããã®ã§ãäžé£ã®æµããšããã£ãç¹ãä»åã®ãããªã±ãŒã¹ã§ã®èª¿æ»ã«äœ¿ããæ±çšçãªèª¿æ»ææ³ãã玹ä»ããããšæããŸãã SQL Server以å€ã®RDBMSãã䜿ãã®æ¹ã«ãããSQL Serverã§ã¯ãããªæ
å ±ããšããã®ããMySQLã ã£ããããã§ãšããæ
å ±ã ãªããšããããã«æ¯èŒããªããèªãã§ããã ãããšå¬ããã§ãã åãã«æµ®ããã 仮説 äŸé ŒãåããŠæåã«æãæµ®ããã ã®ã¯ããããããã³ã°ãèµ·ããŠããã®ã§ã¯ããšãã仮説ã§ãããããã§ã æ¡åŒµã€ãã³ã ã䜿ã£ãŠããããã³ã°ãæ€åºã§ããç¶æ
ã«ããŸãããååŸããããã«èšå®ããã€ãã³ãã¯ä»¥äžã®4ã€ã§ãã blocked process reportïŒããããã³ã°ãäžå®æéç¶ããå Žåã«çºçïŒ attentionïŒã¢ããªããåãåã£ãéäžçµäºã®èŠæ±ã«å¿ããŠã¯ãšãªã忢ãããšãã«çºçïŒ sql_batch_completedïŒã¯ãšãªã®å®è¡å®äºæã«çºçïŒ RPC_completedïŒã¯ãšãªã®å®è¡å®äºæã«çºçïŒ sql_batch_completedãšRPC_completedã®éãã«ã€ããŠã¯ãsql_batch_completedã¯ã¯ãšãªãTransact-SQLããããšããŠå®è¡ããããšãã«çºçããŸããäžæ¹ã§ãRPC_completedã¯ã¯ãšãªããªã¢ãŒã ããã·ãŒãžã£åŒã³åºããšããŠå®è¡ããããšãã«çºçããŸããblocked process reportã«ã€ããŠã¯ ãã¡ã ã«è©³ãã解説ãããŠããŸããä»åã¯ããã°ã©ã åŽã§èšå®ããã¿ã€ã ã¢ãŠãå€ã5ç§ã§ãããããblocked process thresholdã«ã¯3ç§ãèšå®ããŸããããŸããsql_batch_completedãšRPC_completedã«ã€ããŠã¯Result=AbortïŒç°åžžçµäºïŒã§ãã£ã«ã¿ãèšå®ããŸãããResult=Abortã§ãã£ã«ã¿ããsql_batch_completedãšRPC_completedã€ãã³ããèµ·ããåäžæé垯ã§blocked process reportã€ãã³ããçºçããŠããã°ãããããã³ã°ãåå ã§ã¿ã€ã ã¢ãŠãããå¯èœæ§ããããŸãããŸããblocked process reportã€ãã³ãã®äžèº«ãèŠãããšã§ãResult=Abortã§çµäºããã¯ãšãªãããããã³ã°ãããŠãããã©ãããç¹å®ã§ããŸãã 調æ»ããçµæãResult=Abortã§ãã£ã«ã¿ããsql_batch_completedãšRPC_completedã€ãã³ããèµ·ããåäžæé垯ã§ãblocked process reportã€ãã³ãã¯èµ·ããŠããŸããã§ããããããã£ãŠãä»åã®ã¿ã€ã ã¢ãŠãã®åå ã¯ããããã³ã°ã§ã¯ãªãããšãåãããŸããã æ¬¡ã®èª¿æ»ã«ç§»ãããã®æ
å ±ååŸ ããããã³ã°ã§ã¯ãªãããšãåãã£ãã®ã§ã次ã®ä»®èª¬ãç«ãŠãããšãèããããåå ã«ã€ããŠèããŸãããããããããã€ãã¯é«éãªã¯ãšãªãçªç¶é
ããªãäºè±¡ãã®åå ãšããŠã¯èãããããã¿ãŒã³ãè€æ°ååšããŸãããã®ãããæ¬¡ã®ã¹ããããšããŠããããªã仮説ãç«ãŠãã®ã§ã¯ãªããæ¬¡ã®èª¿æ»ã«ç§»ãããã«ã©ããã£ãæ
å ±ãååŸããã°è¯ãããèããŸããã ã¿ã€ã ã¢ãŠãããã¯ãšãªã5ç§éå®è¡ããç¶ãããšããäœããã®ãåŸ
ã¡ç¶æ
ãã«ãªã£ãŠãããšèããããŸããããããã³ã°ã¯æ°ããåŸ
ã¡ç¶æ
ã®äžã€ã§ãããªããã©ããã£ãåŸ
ã¡ç¶æ
ã§ãã£ãããåŸè¿œãã§ããä»çµã¿ãäœãããšã§èª¿æ»ã«å¿
èŠãªæ
å ±ãååŸã§ããã®ã§ã¯ãšèããŸããã ããã§ãå®è¡äžã®ãªã¯ãšã¹ããååŸã§ãã DMV ã§ããã dm_exec_requests ã®å®è¡çµæã1ç§ããšã«ããŒãã«ã«ãã³ãããä»çµã¿ãäœããŸããããã®ããŒãã«ã«ã¯ãå®è¡äžã¯ãšãªã®çŸåšã®åŸ
ã¡ç¶æ
ãšååã®åŸ
ã¡ç¶æ
ããwait_typeãããlast_wait_typeããšããŠããããæ ŒçŽãããŠããŸãããã®ããã1ç§ããšã«ãã®æ
å ±ããã³ãããŠããããšã§ãã¿ã€ã ã¢ãŠãã«ããããŸã§ã®åŸ
ã¡ç¶æ
ã®é·ç§»ãåŸãã確èªããããšãã§ããŸãã ãŸãããã³ãããããã®ããŒãã«ã以äžã®ã¯ãšãªã§äœæããŸãã select getdate() ,a.session_id ,a.request_id ,a.start_time ,a.status ,a.command ,a.database_id ,a.blocking_session_id ,a.wait_type ,a.wait_time ,a.last_wait_type ,a.wait_resource ,a.open_transaction_count ,a.open_resultset_count ,a.transaction_id ,a.cpu_time ,a.total_elapsed_time ,a.scheduler_id ,a.reads ,a.writes ,a.logical_reads ,a.text_size ,a.transaction_isolation_level ,a.lock_timeout ,a.deadlock_priority ,a.row_count ,a.prev_error ,a.nest_level ,a.granted_query_memory ,a.executing_managed_code ,b.login_time ,b.host_name ,b.program_name ,b.client_interface_name ,b.login_name ,b.memory_usage ,b.total_scheduled_time ,b.last_request_start_time ,b.last_request_end_time into dm_exec_requests_dump from sys.dm_exec_requests a with (nolock) join sys.dm_exec_sessions b with (nolock) on a.session_id = b.session_id where 1 = 1 次ã«ã以äžã®ã¯ãšãªããžã§ããªã©ã§å®è¡ããŸããdm_exec_requestsãSELECTããçµæããç¡éã«ãŒãã§1ç§ããšã«ããŒãã«ã«INSERTããŠãããŸãã set nocount on while ( 1 = 1 ) begin insert into dm_exec_requests_dump select getdate() ,a.session_id ,a.request_id ,a.start_time ,a.status ,a.command ,a.database_id ,a.blocking_session_id ,a.wait_type ,a.wait_time ,a.last_wait_type ,a.wait_resource ,a.open_transaction_count ,a.open_resultset_count ,a.transaction_id ,a.cpu_time ,a.total_elapsed_time ,a.scheduler_id ,a.reads ,a.writes ,a.logical_reads ,a.text_size ,a.transaction_isolation_level ,a.lock_timeout ,a.deadlock_priority ,a.row_count ,a.prev_error ,a.nest_level ,a.granted_query_memory ,a.executing_managed_code ,b.login_time ,b.host_name ,b.program_name ,b.client_interface_name ,b.login_name ,b.memory_usage ,b.total_scheduled_time ,b.last_request_start_time ,b.last_request_end_time from sys.dm_exec_requests a with (nolock) join sys.dm_exec_sessions b with (nolock) on a.session_id = b.session_id where a.session_id > 50 and datediff(s, a.start_time, GETDATE()) >= 1 waitfor delay ' 00:00:01 ' end ããšã¯ãã¿ã€ã ã¢ãŠãããã¯ãšãªã®ã»ãã·ã§ã³IDãšã¿ã€ã ã¢ãŠãæé垯ã§ããŒãã«ããã£ã«ã¿ããŸããã¿ã€ã ã¢ãŠãããã¯ãšãªã®ã»ãã·ã§ã³IDã¯ãResult=Abortã§ãã£ã«ã¿ããsql_batch_completedãRPC_completedã€ãã³ãã確èªããããšã§ååŸã§ããŸãã select top 100 datediff(ms, start_time, collect_date) as duration_ms ,* from dm_exec_requests_dump with (nolock) where collect_date between ' 2020-04-10 11:59 ' and ' 2020-04-10 12:10 ' and session_id in ( 559 ) order by collect_date ã¿ã€ã ã¢ãŠãããã¯ãšãªã¯äžå³ã®ããã«ãåžžã«PAGEIOLATCH_SHã§åŸ
ã£ãŠããç¶æ
ã§ãããããã§ãPAGEIOLATCH_SHãšããåŸ
ã¡ç¶æ
ã«ã€ããŠèª¬æããŸããSQL Serverã§ã¯ãå¿
ãã¡ã¢ãªããããŒã¿ãèªãã®ã§ããã以äžã®ããããã®æµãããšããŸãã ã¡ã¢ãªã«æ¬²ããããŒã¿ãããå ŽåïŒã¡ã¢ãªããçŽæ¥èªã ã¡ã¢ãªã«æ¬²ããããŒã¿ããªãå ŽåïŒãã£ã¹ã¯ããã¡ã¢ãªã«èªã¿ããã®åŸã¡ã¢ãªããçŽæ¥èªã PAGEIOLATCH_SHã¯ããã£ã¹ã¯ããã¡ã¢ãªã«èªãããšãã«çºçããåŸ
ã¡ã§ãããã®ãããç©çèªã¿åãã«ããåŸ
ã¡æéãèµ·å ããŠæ®æ®µãããã¯ãšãªå®è¡ã«æéãããã£ãŠããç¶æ³ã ã£ããšãããŸããããããã³ã°ã®ããã«ä»ã®ãªã¯ãšã¹ããšç«¶åããŠããããã§ã¯ãããŸããã§ããã å®è¡ãã©ã³ãçªçºçã«ãããããªããéåžžããã倧éã®IOãçºçãããŠããå¯èœæ§ãèããã¿ã€ã ã¢ãŠãããã¯ãšãªã®å®è¡ãã©ã³ã®ããããã£ã確èªããŠã¿ãŸããããã®çµæããååãªæ°ã®ãã©ã³ãèŠã€ãããŸããããšããçç±ã§ã¯ãšãªã®æé©åãéäžã§çµãã£ãŠããŸãããæé©åãéäžçµäºããçšåºŠã«ã·ã³ãã«ãªã¯ãšãªãªã®ã§ãå®è¡ãã©ã³ãçªçºçã«ãããããªãããã§ããªãããã§ããã å¥ã®å¯èœæ§ãšããŠããããåŠççã§å€§éã«ããŒã¿ãèªã¿åãåŠçãçºçããã¿ã€ãã³ã°ã§ãã¡ã¢ãªããããŒã¿ããã£ãã·ã¥ã¢ãŠããããããšã§éåžžæãããå€ãã®ããŒã¿ã®ãã£ã¹ã¯èªã¿åããçºçããç¶æ³ãèããŸãããããã§ã[SET STATISTICS IO ON]ãã€ããŠã¿ã€ã ã¢ãŠãããã¯ãšãªå®è¡ããåããŒãã«ã®èªã¿åãç¶æ³ã確èªããŸããã å€å°ç©çIOã¯çºçããŠããŸãããéåžžæã¯10ããªç§çšåºŠã§å®è¡å®äºããŸãããã®ãããä»®ã«ãã£ãã·ã¥ã¢ãŠããããããšã§å
šããŒã¿ãç©çèªã¿åãã«ãªã£ããšããŠãã5ç§ãããããã®ãªã®ã ããããšçåã«æããŸããã 以äžãèžãŸãããšããã£ãã·ã¥ã¢ãŠãã«ããç©çãã£ã¹ã¯èªã¿åãéãå¢ããããšãåå ãšããããã¯ãå¥ã®ã¯ãšãªã倧éã®ããŒã¿ãèªã¿åãããšã§æ¥æ¿ãªç©çãã£ã¹ã¯è² è·ããããããã£ã¹ã¯ãã¥ãŒã®æ°å€ãäžæãã1IOãããã®ç©çèªã¿åãã®æéã䌞ã³ãŠããã®ã§ã¯ããšèããŸããã ã¿ã€ã ã¢ãŠããããšãã®dm_exec_requestsã®ãã³ãçµæãåæ²ããŸããäžå³ãããwait_timeãæ¯åæ°10ããªç§ã«ãªã£ãŠããããšãåãããŸããããã¯æ®æ®µã®åŸåãªã®ããã¿ã€ã ã¢ãŠãæã®åŸåãªã®ã倿ããããã«ãä»ãŸã§ã®çޝèšå€ïŒâéåžžæïŒãããç©çãã£ã¹ã¯èªã¿åãæã®å¹³ååŸ
ã¡æéã確èªããŸããã select * ,wait_time_ms / waiting_tasks_count as avg_wait_time_ms from sys.dm_os_wait_stats where wait_type like ' %pageiolatch% ' and waiting_tasks_count > 0 PAGEIOLATCH_SHã®å¹³ååŸ
ã¡æéïŒavg_wait_time_msïŒã¯2ããªç§ã§ããããã®ããšãããã¿ã€ã ã¢ãŠããçºçããã¿ã€ãã³ã°ã§ã¯ã1IOãããã®åŸ
ã¡æéãéåžžæããã倧å¹
ã«é·ããªã£ãŠããããšãåãããŸããããã£ã¹ã¯ãŸããã®ã¡ããªã¯ã¹ãæ¡åããããšã§ããã®ãããã®æ
å ±ããã詳现ã«ç¢ºèªã§ããŸãããããã£ãŠã次ã®ã¹ããããšããŠperfmonã§æ¡åããã¡ããªã¯ã¹ãè§£æããŠã¿ãŸããã perfmonã§ååŸããã¡ããªã¯ã¹è§£æ 20:05:24ããã¿ã€ã ã¢ãŠãããã¯ãšãªããã£ãã®ã§ããã®æé垯ä»è¿ã«æ³šç®ããŠåã¡ããªã¯ã¹ã確èªããŸããã ã¡ã¢ãªå
ã®ããŒã¿ä¿æäºæž¬æéã瀺ããSQL Server:Buffer Manager\Page life expectancyãã®å€ã宿çã«å€§å¹
ã«æžå°ããŠããŸããããã¯ããŒã¿ã®ãã£ãã·ã¥ã¢ãŠãã宿çã«çºçããŠãããšèªã¿åãããšãã§ããŸãããããçšåºŠèŠåæ§ããããã¿ã€ã ã¢ãŠãçºçæã ãç¹ç°ãªåœ¢ç¶ãšããããã§ã¯ãããŸããã§ããã ãPAGEIOLATCH_SHãåŸ
ã¡ããšã©ãŒçºçã®æé垯ã§çªåºããŠé«ãããšãåãããŸããã¿ã€ã ã¢ãŠãããŠããªãã¯ãšãªããäžæçã«å®è¡æéã䌞ã³ãŠããå¯èœæ§ãããããã§ãã ãã£ã¹ã¯ãã¥ãŒã確èªããŸãããããŒã¿ãã¡ã€ã«ãæ ŒçŽãããŠãããã©ã€ãã®ãã£ã¹ã¯ãã¥ãŒãçªåºããŠé«ããªã£ãŠããŸãããã¿ã€ã ã¢ãŠãæé垯以å€ãã¹ãã€ã¯ã¯ã¿ãããŸããã ç§éã®ãã£ã¹ã¯èªã¿åãéã«ã€ããŠããããŒã¿ãã¡ã€ã«ãæ ŒçŽãããŠãããã©ã€ããçªåºããŠé«ããã¿ã€ã ã¢ãŠããèµ·ããæé垯ã§ã¯é«ãå€ã®ãŸãŸäžå®æéæšç§»ããŠããããã«èŠåããããŸãããã®å€ãDBãµãŒããŒã®ç©çãã£ã¹ã¯æ§èœã®äžéå€ã§ããå¯èœæ§ãé«ããã§ãã ç©çèªã¿åããµã€ãºãšããã£ã¹ã¯ãã¥ãŒã®çºçç¶æ³ã®é¢ä¿ãèŠãããéããŠã¿ããšãäž¡è
ã«ã¯çžé¢é¢ä¿ãããããã§ãã ç©çèªã¿åããµã€ãºãšPage IO Latch Waitsã«ãé¢ä¿ãããããã§ãããã倧éã«ãã£ã¹ã¯èªã¿åããè¡ãããã»ã¹ã1ã€ä»¥äžååšãããã£ã¹ã¯æ§èœäžéã«éããã»ã©ã®èªã¿åããè¡ã£ãŠããç¶æ³äžã§ãç©çãã£ã¹ã¯ã«ã¢ã¯ã»ã¹ãå¿
èŠãªã¯ãšãªãå®è¡ãããããšã§Page IO Latch Waitsãã¹ãã€ã¯ããããšè§£éããŸããã perfmonã®ã¡ããªã¯ã¹è§£æçµæãŸãšã 宿çã«ç©çãã£ã¹ã¯èªã¿åãæ§èœã®äžéã«éããŠããããã®ã¿ã€ãã³ã°ã§ç©çèªã¿åããå¿
èŠãªã¯ãšãªãåºãŠãããšãPage IO Latch Waitsããçºçããããã§ãããã®æç¹ã§ããæ®æ®µã¯æ°10ããªç§ã§å®è¡å®äºããã¯ãšãªããããŸã«5ç§éå®è¡ããç¶ããŠæçµçã«ã¿ã€ã ã¢ãŠããããåå ãšããŠã¯ããã®ã¯ãšãªèªèº«ã«ã¯ãªãã®èœã¡åºŠããªãããšãåãããŸããããããã«ãå¥ã®äœããã®ã¯ãšãªããã£ã¹ã¯æ§èœã®äžéã«éããã»ã©ã®å€§éã®ç©çèªã¿åããè¡ã£ãŠãããããä»ã®ã¯ãšãªãããããªç©çèªã¿åããè¡ãéã§ãéåžžæããããªãæéãããã£ãŠããŸããå Žåã«ãã£ãŠã¯ã¿ã€ã ã¢ãŠãã«éããããšãããããšããç¶æ³ã§ããã æåŸã«ãå®éã«å€§éã®ç©çèªã¿åããçºçãããŠããã¯ãšãªãç¹å®ããã°ãå®éã«å¯Ÿçã宿œã§ããå¯èœæ§ããããŸãã 倧éã®ç©çèªã¿åãããããªã£ãŠããã¯ãšãªãç¹å®ãã ã¿ã€ã ã¢ãŠããçºçããæé垯ã«ãããç©çèªã¿åãéãå€ãé ã«session_idãäžŠã³æ¿ããã¯ãšãªã以äžã®éãäœæããŸããã declare @start_time datetime, @end_time datetime set @start_time = ' 2020-04-14 20:05:10 ' set @end_time = ' 2020-04-14 20:05:40 ' declare @total_reads bigint set nocount on --session_idããšã®ç©çèªã¿åãããŒãžæ°æšç§» select (a.reads - b.reads) as reads_diff ,a.* from ( select row_number() over(partition by session_id, start_time order by collect_date) as rownum ,* from dm_exec_requests_dump with (nolock) where collect_date between @start_time and @end_time ) a join ( select row_number() over(partition by session_id, start_time order by collect_date) as rownum ,* from dm_exec_requests_dump with (nolock) where collect_date between @start_time and @end_time ) b on a.session_id = b.session_id and a.start_time = b.start_time and a. rownum -1 = b. rownum where (a.reads - b.reads) > 0 order by a.session_id, a.collect_date --ç·ç©çèªã¿åãæ°ãååŸ select @total_reads = sum ((a.reads - b.reads)) from ( select row_number() over(partition by session_id, start_time order by collect_date) as rownum ,* from dm_exec_requests_dump with (nolock) where collect_date between @start_time and @end_time ) a join ( select row_number() over(partition by session_id, start_time order by collect_date) as rownum ,* from dm_exec_requests_dump with (nolock) where collect_date between @start_time and @end_time ) b on a.session_id = b.session_id and a.start_time = b.start_time and a. rownum -1 = b. rownum where (a.reads - b.reads) > 0 --ç·è«çèªã¿åãæ°ãå€ãé ã«ãªã¯ãšã¹ãã䞊ã¹ã select a.session_id, a.start_time, sum ((a.reads - b.reads)) as reads_diff, sum ((a.reads - b.reads)) * 100 / @total_reads as percentage from ( select row_number() over(partition by session_id, start_time order by collect_date) as rownum ,* from dm_exec_requests_dump with (nolock) where collect_date between @start_time and @end_time ) a join ( select row_number() over(partition by session_id, start_time order by collect_date) as rownum ,* from dm_exec_requests_dump with (nolock) where collect_date between @start_time and @end_time ) b on a.session_id = b.session_id and a.start_time = b.start_time and a. rownum -1 = b. rownum where (a.reads - b.reads) > 0 group by a.session_id, a.start_time order by sum ((a.reads - b.reads)) desc ãã®ã¯ãšãªã®å®è¡çµæã§ãã該åœã®æéåž¯ã§æãç·ç©çèªã¿åããµã€ãºã倧ããã»ãã·ã§ã³ã§ã29541ããŒãžïŒçŽ230MBïŒããèªã¿åã£ãŠããªããšããçµæã«ãªããŸããããã®çšåºŠã®ãã£ã¹ã¯è² è·ã§ã¯ãæ§èœäžéã«ã¯éããªãå°è±¡ã§ãäœæããã¯ãšãªãééã£ãŠãããã§ããããã§ã次ã«ãã¿ã€ã ã¢ãŠãçºççŽåã®20:05ããã«éå§ããã¯ãšãªã®äžã§ãç·ç©çèªã¿åãæ°ãå€ãé ãã§äžŠã³æ¿ããŠã¿ããšããã以äžã®ã¯ãšãªãã¿ã€ããŸããã â ãšâ£ã«çç®ãããšãã¯ãšãªãã¿ã€ã ã¢ãŠãããæé垯ïŒ2020/04/14 20:05:24ããïŒã§ã¯ãç©çèªã¿åãããŒãžæ°ïŒreadsïŒãã«ãŠã³ãã¢ãããããŠãããããã£ãš0ã«ãªã£ãŠããŸããããã®ãããæåã«äœæããã¯ãšãªã«ã¯ãããããŠããŸããã§ããããããŠãã¿ã€ã ã¢ãŠããšã¯æéçã«ã¯é¢ä¿ããªãæé垯ïŒå³äžâ¡ïŒã«ãããŠããããªããreaedsãã5358249ïŒçŽ41GBïŒãŸã§è·³ãäžãã£ãŠããŸããã ä»åã®DBãµãŒããŒã®ãã£ã¹ã¯æ§èœãèæ
®ãããšãæ°ç§ã§41GBãèªã¿åãããšã¯äžå¯èœã§ãããããã£ãŠããreadsã¯åžžã«èªã¿åã£ããµã€ãºãã«ãŠã³ãã¢ããããããã§ã¯ãªããããã¿ã€ãã³ã°ã§äžæ°ã«çޝç©èªã¿åãæ°ãèšäžããããšãããããšãããŸãããã®ä»æ§ãç¥ããªãã£ãã®ã§ã¯ãšãªã®æžãæ¹ãééããçµæãšããŠæ ¹æ¬åå ã®ã¯ãšãªãèŠã€ããããšãã§ããªãç¶æ
ã«ãªã£ãŠããŸãããreadsãèšäžãããªãæ¡ä»¶ã§ãããå°ãªããšãlast_wait_type=CXPACKETïŒâ¢ïŒã§ããå Žåãã€ãŸã䞊ååŠçããŠããéã¯readsã«éãããwritesãªã©è€æ°é
ç®ãã«ãŠã³ãã¢ãããããªãããã§ãã 以äžã®èª¿æ»ãèžãŸãã以äžã®ã¯ãšãªã§å€§éã®ç©çèªã¿åããè¡ã£ãŠããã¯ãšãªãç¹å®ããããšãã§ããŸããã declare @start_time datetime, @end_time datetime set @start_time = ' 2020-04-14 20:04 ' set @end_time = ' 2020-04-14 20:06 ' declare @total_reads bigint set nocount on --session_idããšã®ç©çèªã¿åãããŒãžæ°æšç§» select (a.reads - b.reads) as reads_diff ,a.* from ( select row_number() over(partition by session_id, start_time order by collect_date) as rownum ,* from dm_exec_requests_dump with (nolock) where start_time between @start_time and @end_time ) a join ( select row_number() over(partition by session_id, start_time order by collect_date) as rownum ,* from dm_exec_requests_dump with (nolock) where start_time between @start_time and @end_time ) b on a.session_id = b.session_id and a.start_time = b.start_time and a. rownum -1 = b. rownum where (a.reads - b.reads) > 0 order by a.session_id, a.collect_date --ç·ç©çèªã¿åãæ°ãååŸ select @total_reads = sum ((a.reads - b.reads)) from ( select row_number() over(partition by session_id, start_time order by collect_date) as rownum ,* from dm_exec_requests_dump with (nolock) where start_time between @start_time and @end_time ) a join ( select row_number() over(partition by session_id, start_time order by collect_date) as rownum ,* from dm_exec_requests_dump with (nolock) where start_time between @start_time and @end_time ) b on a.session_id = b.session_id and a.start_time = b.start_time and a. rownum -1 = b. rownum where (a.reads - b.reads) > 0 --ç·è«çèªã¿åãæ°ãå€ãé ã«ãªã¯ãšã¹ãã䞊ã¹ã select a.session_id, a.start_time, sum ((a.reads - b.reads)) as reads_diff, sum ((a.reads - b.reads)) * 100 / @total_reads as percentage from ( select row_number() over(partition by session_id, start_time order by collect_date) as rownum ,* from dm_exec_requests_dump with (nolock) where start_time between @start_time and @end_time ) a join ( select row_number() over(partition by session_id, start_time order by collect_date) as rownum ,* from dm_exec_requests_dump with (nolock) where start_time between @start_time and @end_time ) b on a.session_id = b.session_id and a.start_time = b.start_time and a. rownum -1 = b. rownum where (a.reads - b.reads) > 0 group by a.session_id, a.start_time order by sum ((a.reads - b.reads)) desc ä¿®æ£çã®ã¯ãšãªã®å®è¡çµæã§ããä¿®æ£åã¯ããã¿ã€ã ã¢ãŠãçºçã¿ã€ãã³ã°ã§reads=0ã ãã©ãã£ã¹ã¯ã«é«è² è·ããããŠããã»ãã·ã§ã³ãååšããå Žåãããããšããããšãèæ
®ããã«äœæããã¯ãšãªã§ãããäžæ¹ã§ãä¿®æ£çã§ã¯ãããèæ
®ããããã§äœæããŠããããããã¡ãã®ã¯ãšãªã®æ¹ãä¿¡é Œã§ããçµæãåŸãããŠããŸãã åå ãšè§£æ±ºæ¹æ³ãŸãšã æç¶çãªã¿ã€ã ã¢ãŠãã®åå ãã£ã¹ã¯æ§èœéçãŸã§éããã»ã©ã®ç©çèªã¿åããæ°ç§ïœæ°10ç§ç¶ç¶ããç¶æ
ã«ãããŠãç©çèªã¿åããå¿
èŠãªã¯ãšãªãå®è¡ããããšããéåžžãããç©çèªã¿åãã«æéãããããã¿ã€ã ã¢ãŠãã«éããããšãããç¶æ³ã«ãªã£ãŠããŸããã è§£æ±ºæ¹æ³ çè«çã«ã¯ãæ§èœéçãŸã§ç©çèªã¿åããçºçãããªããã°å€§äžå€«ã§ãããã®ããã«ã¯ã倧éã®ç©çèªã¿åããè¡ã£ãŠããã¯ãšãªãç¹å®ããç¹å®çµæã«ãã£ãŠä»¥äžã®AãBããããã®å Žåã«å¿ãã察å¿ããšãã°è¯ãã¯ãã§ãã AïŒè€æ°ã®ã¯ãšãªãåã¿ã€ãã³ã°ã§å®è¡ãããããšã§åç®å€ãšããŠæ§èœéçãŸã§èªã¿åãå Žå åã¯ãšãªããã¥ãŒãã³ã°ãããã宿çãªåšæã§å®è¡ããŠããã¯ãšãªãããå Žåã¯å®è¡ã¿ã€ãã³ã°ããããã BïŒåäžã®ã¯ãšãªã«ããæ§èœéçãŸã§èªã¿åãå Žå ç©çèªã¿åãåæžãšãã芳ç¹ã§ã®ãã¥ãŒãã³ã°ïŒå§çž®ã»ã¯ãšãªãã¥ãŒãã³ã°ã»ã€ã³ããã¯ã¹çïŒã宿œããã ä»åç¹å®ããçµæã¯Bã«è©²åœããã·ã³ãã«ã«ã€ã³ããã¯ã¹ã匵ãããšã§è©²åœã¯ãšãªã®IOãåçã«åæžã§ããŸãããçµæçã«ãã®ã¯ãšãªèµ·å ã§ã®ã¯ãšãªã¿ã€ã ã¢ãŠãçºçãé²ãããšãã§ããããã«ãªããŸããã ã¯ãšãªã¿ã€ã ã¢ãŠãçºçæã®åå èª¿æ»æ¹æ³ ä»å玹ä»ããèª¿æ»ææ³ãã以äžã®3ã¹ããããšããŠãŸãšããŸãã çŸåšå®è¡äžã®ã¯ãšãªãªã¹ããååŸã§ããDMVã§ããdm_exec_requestsã®SELECTçµæã宿çã«ãã³ãããŠãã ã¿ã€ã ã¢ãŠããçºçããå Žåã«ã該åœã®ã¯ãšãªãã©ããã£ãåŸ
ã¡ç¶æ
ã§é·ç§»ããŠãããã確èªãã åŸ
ã¡ç¶æ
ã®çš®é¡ã«å¿ããŠããã«èª¿æ»ããŠãã ã¹ããã3ã«ã€ããŠã¯ãåŸ
ã¡ç¶æ
ã«ãã£ãŠæé ãå€å²ã«ããããŸãããã¹ããã1ãš2ã«ã€ããŠã¯èª¿æ»ã®åææ®µéãšããŠæ±çšçã«äœ¿ã£ãŠããã ãããšæããŸãã è£è¶³ ä»å調æ»ãããµãŒããŒã§ã¯äœ¿ããŸããã§ããããSQL Server 2017以éã§ã¯ã¯ãšãªã¹ãã¢ã䜿ã£ãŠåã¯ãšãªã®åŸ
ã¡äºè±¡ãååŸããããšãã§ããããã«ãªã£ãŠããŸãããã®ãããä»åã玹ä»ããèª¿æ»ææ³ãã¯ãšãªã¹ãã¢ã ãã§å®çµãããããšãã§ããŸãããªããã¯ãšãªã¹ãã¢èªäœã¯2016ããæäŸãããŠããŸãããåŸ
ã¡äºè±¡ãååŸã§ããããã«ãªã£ãã®ã¯2017ããã§ãã åèïŒ ã¯ãšãªã¹ãã¢ãå©çšããåŸ
ã¡äºè±¡ã®ååŸ ãŸãšã 調æ»äŸé Œãåãããšãã«æåã«æãã€ããåå ã¯ããããã³ã°ã§ããããçµæãšããŠãŸã£ããéãåå ã§ã¿ã€ã ã¢ãŠããèµ·ããŠããŸãããåå 調æ»ã§ã¯ãä»®èšãç«ãŠãåã«å¯èœãªéãå¿
èŠãªæ
å ±ãéããããšãéèŠã ãšæããŸããã ZOZOãã¯ãããžãŒãºã§ã¯ãäžç·ã«ãµãŒãã¹ãäœãäžããŠããã仲éãåéäžã§ãããèå³ã®ããæ¹ã¯ã以äžã®ãªã³ã¯ãããã²ãå¿åãã ããïŒ tech.zozo.com