SQL SERVER QUERT DATA STORE的坑

转自:https://mp.weixin.qq.com/s?__biz=Mzg4NDA0NTEwNA==&mid=2247490527&idx=1&sn=00979d06de7ee068d003507c9423225e&chksm=cfbf7f80f8c8f696cdb343b1f8889b0d4f3d61624e717af4524bc11b14d78f43277e028a61f4&scene=178&cur_album_id=1548730673153310720#rd

  

 【1】SQL SERVER 2016 query data store

如果你是SQL SERVER 忠实的爱好者,估计应该知道SQL SERVER 2016的一个功能 QDS ,  query data store ;

这个功能可以统计你SQL SERVER 中的语句信息,通过各种维度的分析,生成图表,让你使用SQL SERVER 更简单的发现问题,和处理一些语句性能的问题。

 

但如果你胆敢使用了 SQL SERVER QDS ,则一定会让你有一次发誓再也不在碰SQL SERVER。

我们来说说你打开这个功能后,会发生什么。核心问题:

1  首先你的SQL SERVER 有时会莫名其妙的卡顿(经常会在繁忙的SQL SERVER 系统中堆积任务)

2  在你重新启动SQL SERVER 后,让你的整体的SQL SERVER 不在属于你,而是属于 QDS_LOADDB 这个SESSION, 并且你记录的历史信息越多,系统曾经越繁忙,则SQL SERVER 开始后的,魂不附体,死亡闪烁越严重,如果你的机器的内存不足或者本身就缺少的情况下,有可能你的SQL SERVER 将在一天内,什么工作都无法进行。 

当然版本的说清楚 SQL SERVER 13.0.4422.0

在讨伐这个让人崩溃的功能之前,我们的说说这个功能到底帮助了你什么

  SQL SERVER 的 QUERY STORE 功能提供了查询执行计划,和性能分析的功能,可以帮助你快速的解决语句方面的性能问题,同时保存你语句的性能方面的历史信息,通过各种便于理解的方式将你的语句方面的问题进行多方位的展现。

  打开它非常的简单, alter database set query_store = on 

 

然后你的噩梦就可以悄无声息的开始了。

  

 

 

 

在你每个数据库上都会出现 QUERY_STORE 的 FOLDER ,其中有以上一些维度的信息,看上去很美,并且直接点击展示的信息可以直接到语句的那一面

  

  

 

 

 

说到这里,估计不少人已经被这个功能吸引,要什么自行车,这个功能上线了,那还需要什么DBA , 还需要数据库服务厂商,随便弄弄就可以了。

是的数据库自制这个功能,还是ORACLE 提出了,数据库越来越智能,不会再需要“人” 来管理。实际上,估计和威尔史密斯的电影  我.机器人  的结果一样,惊心动魄,魂不附体。

我们来说说你打开这个功能后,会发生什么。

1  首先你的SQL SERVER 有时会莫名其妙的卡顿(经常会在繁忙的SQL SERVER 系统中堆积任务)

2  在你重新启动SQL SERVER 后,让你的整体的SQL SERVER 不在属于你,而是属于 QDS_LOADDB 这个SESSION, 并且你记录的历史信息越多,系统曾经越繁忙,则SQL SERVER 开始后的,魂不附体,死亡闪烁越严重,如果你的机器的内存不足或者本身就缺少的情况下,有可能你的SQL SERVER 将在一天内,什么工作都无法进行。 

 

来我们看看微软是怎么答复这个问题的

(翻译)

问题:在将query data store 功能打开后并在启动后(这里应该指的是开启SQL SERVER服务后,QDS启动), 在QDS启动的这段时间(他真善良,没说到底多长时间)所有的查询都无法完成,并且没有数据返回。(他真理智)

 

微软回复:

谢谢您贴出这个问题,我们认为他是非常重要的性能改善点,他发生于QDS 加载的同步模式,在未来的版本我们将改变他成为异步模式。

  

 

 

我们在看看,原来在微软工作,现在自己成为SQL SERVER 技术大咖的“SQL AUTHORITY” 怎么说

  

 

 

其中找出 take some time, 说的好含蓄。 然后我们在看下面,这个问题到底在哪个版本解决了呢?

SQL SERVER 2019 ,OMG ,SQL SERVER 2016 SP2 没有发现这个问题吗, SQL SERVER 2017 没有发现这个问题吗, 微软您真的很软

 

  

 

 

Hello Micorsoft  的 software 们, 你们知道一个打开这个功能的公司,在从新启动服务器后,系统失控,无法响应,只能等待系统完成 QDS 的心情是什么吗?  没有人告诉你要等待多少时间,没有人告诉你何时你的SQL SERVER 才能从魂飞魄散中找回自己的灵魂。(幸好他还能查出问题)

 

这里友情的给将要遇到这个问题的DB 们,下面这个脚本或许能在你已经焦头烂额中,众多的人问你,到底什么时候SQL SERVER 能有响应的时候?

执行以下这个脚本,O 我忘记了,也没有什么用,因为此时SQL SERVER 对任何操作都没有响应, 你对其他人能说的就只有 ,等着 ,或者你就去单用户模式,尝试关掉你曾经引以为傲的这个 QDS。

(注单用户模式,无法在图形下发现 QUERY STORE FOLDER)

 

 

TODAY IS 2020 TIMES, WHO DOES STILL USE THE SQL SERVER?

 

——————————————————————————————

查询等待中的任务的STATUS

-- SQL Wait Stats and Queies
-- (C) Pinal Dave https://blog.sqlauthority.com/ ) 2016
-- Send query result to pinal@sqlauthority.com for quick feedback
SELECT  wait_type AS Wait_Type,
wait_time_ms / 1000.0 AS Wait_Time_Seconds,
waiting_tasks_count AS Waiting_Tasks_Count,
-- CAST((wait_time_ms / 1000.0)/waiting_tasks_count AS decimal(10,4)) AS AVG_Waiting_Tasks_Count,
wait_time_ms * 100.0 / SUM(wait_time_ms) OVER() AS Percentage_WaitTime
--,waiting_tasks_count * 100.0 / SUM(waiting_tasks_count) OVER() AS Percentage_Count
FROM sys.dm_os_wait_stats
WHERE 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_DBM_MUTEX',
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'LAZYWRITER_SLEEP',
N'LOGMGR_QUEUE',
N'MEMORY_ALLOCATION_EXT',
N'ONDEMAND_TASK_QUEUE',
N'PREEMPTIVE_HADR_LEASE_MECHANISM',
N'PREEMPTIVE_OS_AUTHENTICATIONOPS',
N'PREEMPTIVE_OS_AUTHORIZATIONOPS',
N'PREEMPTIVE_OS_COMOPS',
N'PREEMPTIVE_OS_CREATEFILE',
N'PREEMPTIVE_OS_CRYPTOPS',
N'PREEMPTIVE_OS_DEVICEOPS',
N'PREEMPTIVE_OS_FILEOPS',
N'PREEMPTIVE_OS_GENERICOPS',
N'PREEMPTIVE_OS_LIBRARYOPS',
N'PREEMPTIVE_OS_PIPEOPS',
N'PREEMPTIVE_OS_QUERYREGISTRY',
N'PREEMPTIVE_OS_VERIFYTRUST',
N'PREEMPTIVE_OS_WAITFORSINGLEOBJECT',
N'PREEMPTIVE_OS_WRITEFILEGATHER',
N'PREEMPTIVE_SP_SERVER_DIAGNOSTICS',
N'PREEMPTIVE_XE_GETTARGETSTATE',
N'PWAIT_ALL_COMPONENTS_INITIALIZED',
N'PWAIT_DIRECTLOGCONSUMER_GETNEXT',
N'QDS_ASYNC_QUEUE',
N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP',
N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP',
N'QDS_SHUTDOWN_QUEUE',
N'REDO_THREAD_PENDING_WORK',
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'SP_SERVER_DIAGNOSTICS_SLEEP',
N'SQLTRACE_BUFFER_FLUSH',
N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
N'SQLTRACE_WAIT_ENTRIES',
N'UCS_SESSION_REGISTRATION',
N'WAIT_FOR_RESULTS',
N'WAIT_XTP_CKPT_CLOSE',
N'WAIT_XTP_HOST_WAIT',
N'WAIT_XTP_OFFLINE_CKPT_NEW_LOG',
N'WAIT_XTP_RECOVERY',
N'WAITFOR',
N'WAITFOR_TASKSHUTDOWN',
N'XE_TIMER_EVENT',
N'XE_DISPATCHER_WAIT'
) AND wait_time_ms >= 1
ORDER BY Wait_Time_Seconds DESC
-- ORDER BY Waiting_Tasks_Count DESC

 

posted @ 2020-11-20 09:27  郭大侠1  阅读(356)  评论(0编辑  收藏  举报