Sql server 简单的select语句占用了太多的时间
以下简单select语句执行时间过长:Sql server 简单的select语句占用了太多的时间,sql-server,tsql,sql-server-2012,rdbms,Sql Server,Tsql,Sql Server 2012,Rdbms,以下简单select语句执行时间过长: select * from sys_letter_intid 系统字母初始化表结构: CREATE TABLE [dbo].[sys_letter_intid]( [intid] [int] NULL, [id] [int] IDENTITY(1,1) NOT NULL, [misc_text] [nvarchar](50) NULL, [misc_Date] [datetime] NULL, [misc_amount] [money] NULL ) O
select * from sys_letter_intid
系统字母初始化表结构:
CREATE TABLE [dbo].[sys_letter_intid](
[intid] [int] NULL,
[id] [int] IDENTITY(1,1) NOT NULL,
[misc_text] [nvarchar](50) NULL,
[misc_Date] [datetime] NULL,
[misc_amount] [money] NULL
) ON [PRIMARY]
不确定行数,因为即使从sys\u letter\u intid中选择COUNT(*)并从sys\u letter\u intid order by intid desc中选择top 1*,执行查询也会花费太多时间
- 索引空间-0.023 MB
- 行计数-1
- 数据空间-0.008MB
spid dbid ObjId IndId Type Resource Mode Status
------ ------ ----------- ------ ---- -------------------------------- -------- ------
52 8 0 0 DB S GRANT
54 8 1185439297 0 TAB IX GRANT
54 8 0 0 DB S GRANT
55 5 0 0 DB S GRANT
56 8 0 0 DB S GRANT
56 8 2049442375 1 KEY (716bd5e0da25) X GRANT
56 8 2049442375 0 TAB IX GRANT
56 8 2049442375 1 PAG 1:29168 IX GRANT
58 8 0 0 DB S GRANT
60 1 2107154552 0 TAB IS GRANT
60 8 0 0 DB S GRANT
61 8 0 0 DB S GRANT
61 8 2049442375 1 PAG 1:29168 IS GRANT
61 8 2049442375 1 KEY (716bd5e0da25) S WAIT
61 8 2049442375 0 TAB IS GRANT
62 8 0 0 DB S GRANT
63 5 0 0 DB S GRANT
64 8 0 0 DB S GRANT
66 8 0 0 DB S GRANT
SPID Status Login HostName BlkBy DBName Command CPUTime DiskIO LastBatch ProgramName SPID REQUESTID
----- ------------------------------ ------------------------------------------------------------------------------ --------------- ----- ---------------------------- ---------------- ------- ------ -------------- ------------------------------------------------------------------ ----- ---------
1 BACKGROUND sa . . NULL LOG WRITER 234 0 02/27 03:22:02 1 0
2 BACKGROUND sa . . NULL LAZY WRITER 608 0 02/27 03:22:02 2 0
3 BACKGROUND sa . . NULL RECOVERY WRITER 93 0 02/27 03:22:02 3 0
4 BACKGROUND sa . . NULL LOCK MONITOR 0 0 02/27 03:22:02 4 0
5 BACKGROUND sa . . master SIGNAL HANDLER 0 0 02/27 03:22:02 5 0
6 BACKGROUND sa . . NULL XE DISPATCHER 62 0 02/27 03:22:02 6 0
7 BACKGROUND sa . . NULL RESOURCE MONITOR 780 0 02/27 03:22:02 7 0
8 BACKGROUND sa . . NULL XE TIMER 0 0 02/27 03:22:02 8 0
9 BACKGROUND sa . . master BRKR TASK 0 0 02/27 03:22:40 9 0
10 sleeping sa . . master TASK MANAGER 0 0 02/27 03:22:03 10 0
11 BACKGROUND sa . . master TRACE QUEUE TASK 0 0 02/27 03:22:03 11 0
12 BACKGROUND sa . . NULL SYSTEM_HEALTH_MO 0 0 02/27 03:22:04 12 0
13 BACKGROUND sa . . NULL RECEIVE 312 2 02/27 03:22:04 13 0
14 sleeping sa . . master TASK MANAGER 0 159 03/12 22:46:23 14 0
15 sleeping sa . . master TASK MANAGER 0 1 03/12 22:46:23 15 0
16 BACKGROUND sa . . master CHECKPOINT 109 159 02/27 03:22:34 16 0
17 BACKGROUND sa . . master TASK MANAGER 0 0 02/27 03:22:34 17 0
18 BACKGROUND sa . . NULL UNKNOWN TOKEN 0 0 02/27 03:23:35 18 0
19 sleeping sa . . master TASK MANAGER 0 4 03/12 22:36:22 19 0
20 sleeping sa . . master TASK MANAGER 0 0 03/12 22:46:33 20 0
21 sleeping sa . . master TASK MANAGER 0 0 03/12 22:33:17 21 0
22 sleeping sa . . master TASK MANAGER 0 0 03/12 22:46:33 22 0
23 sleeping sa . . master TASK MANAGER 0 0 03/12 22:50:39 23 0
24 sleeping sa . . master TASK MANAGER 0 0 03/12 22:43:18 24 0
25 BACKGROUND sa . . master BRKR EVENT HNDLR 0 41 02/27 03:22:40 25 0
26 BACKGROUND sa . . master BRKR TASK 218 0 02/27 03:22:40 26 0
27 BACKGROUND sa . . master BRKR TASK 31 0 02/27 03:22:40 27 0
28 BACKGROUND sa . . master BRKR TASK 0 0 02/27 03:22:40 28 0
29 sleeping sa . . master TASK MANAGER 0 7 03/12 22:50:39 29 0
30 sleeping sa . . master TASK MANAGER 0 0 03/12 22:50:39 30 0
51 sleeping admin CGVAK-328 . master AWAITING COMMAND 157 283 03/13 01:15:51 Microsoft SQL Server Management Studio 51 0
52 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 16 1 03/13 01:33:08 Microsoft SQL Server Management Studio - Query 52 0
53 sleeping NT SERVICE\ReportServer$MSSQLSERVER2012 WIN-07VQ7EIB4L1 . ReportServer$MSSQLSERVER2012 AWAITING COMMAND 0 0 03/13 01:40:09 Report Server 53 0
54 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 218 0 03/13 01:28:50 jTDS 54 0
55 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 0 0 03/13 01:29:34 jTDS 55 0
56 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 376 5 03/13 01:31:11 jTDS 56 0
57 sleeping admin CGVAK-328 . master AWAITING COMMAND 16 38 03/13 01:40:22 Database Engine Tuning Advisor 57 0
58 sleeping NT SERVICE\ReportServer$MSSQLSERVER2012 WIN-07VQ7EIB4L1 . ReportServer$MSSQLSERVER2012 AWAITING COMMAND 0 0 03/13 01:41:14 Report Server 58 0
59 sleeping admin CGVAK-328 . master AWAITING COMMAND 0 0 03/13 00:50:47 Database Engine Tuning Advisor 59 0
60 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 125 7 03/13 01:17:27 Microsoft SQL Server Management Studio - Query 60 0
62 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 202 0 03/13 01:41:20 jTDS 62 0
63 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 718 8 03/13 01:29:35 jTDS 63 0
64 SUSPENDED admin CGVAK-328 55 PUC DELETE 0 0 03/13 01:31:11 jTDS 64 0
65 sleeping admin DEVARAJ-PC . master AWAITING COMMAND 374 0 03/13 01:15:05 Microsoft SQL Server Management Studio 65 0
66 sleeping admin DEVARAJ-PC . PUC AWAITING COMMAND 0 0 03/13 01:31:50 Microsoft SQL Server Management Studio - Query 66 0
67 sleeping admin DEVARAJ-PC . master AWAITING COMMAND 0 0 03/13 01:31:46 Microsoft SQL Server Management Studio - Transact-SQL IntelliSense 67 0
68 sleeping admin DEVARAJ-PC . master AWAITING COMMAND 0 0 03/13 01:33:19 Microsoft SQL Server Management Studio - Transact-SQL IntelliSense 68 0
69 RUNNABLE admin CGVAK-328 . PUC SELECT INTO 31 8 03/13 01:33:29 Microsoft SQL Server Management Studio - Query 69 0
(48 row(s) affected)
SP_Who2提供以下输出:
spid dbid ObjId IndId Type Resource Mode Status
------ ------ ----------- ------ ---- -------------------------------- -------- ------
52 8 0 0 DB S GRANT
54 8 1185439297 0 TAB IX GRANT
54 8 0 0 DB S GRANT
55 5 0 0 DB S GRANT
56 8 0 0 DB S GRANT
56 8 2049442375 1 KEY (716bd5e0da25) X GRANT
56 8 2049442375 0 TAB IX GRANT
56 8 2049442375 1 PAG 1:29168 IX GRANT
58 8 0 0 DB S GRANT
60 1 2107154552 0 TAB IS GRANT
60 8 0 0 DB S GRANT
61 8 0 0 DB S GRANT
61 8 2049442375 1 PAG 1:29168 IS GRANT
61 8 2049442375 1 KEY (716bd5e0da25) S WAIT
61 8 2049442375 0 TAB IS GRANT
62 8 0 0 DB S GRANT
63 5 0 0 DB S GRANT
64 8 0 0 DB S GRANT
66 8 0 0 DB S GRANT
SPID Status Login HostName BlkBy DBName Command CPUTime DiskIO LastBatch ProgramName SPID REQUESTID
----- ------------------------------ ------------------------------------------------------------------------------ --------------- ----- ---------------------------- ---------------- ------- ------ -------------- ------------------------------------------------------------------ ----- ---------
1 BACKGROUND sa . . NULL LOG WRITER 234 0 02/27 03:22:02 1 0
2 BACKGROUND sa . . NULL LAZY WRITER 608 0 02/27 03:22:02 2 0
3 BACKGROUND sa . . NULL RECOVERY WRITER 93 0 02/27 03:22:02 3 0
4 BACKGROUND sa . . NULL LOCK MONITOR 0 0 02/27 03:22:02 4 0
5 BACKGROUND sa . . master SIGNAL HANDLER 0 0 02/27 03:22:02 5 0
6 BACKGROUND sa . . NULL XE DISPATCHER 62 0 02/27 03:22:02 6 0
7 BACKGROUND sa . . NULL RESOURCE MONITOR 780 0 02/27 03:22:02 7 0
8 BACKGROUND sa . . NULL XE TIMER 0 0 02/27 03:22:02 8 0
9 BACKGROUND sa . . master BRKR TASK 0 0 02/27 03:22:40 9 0
10 sleeping sa . . master TASK MANAGER 0 0 02/27 03:22:03 10 0
11 BACKGROUND sa . . master TRACE QUEUE TASK 0 0 02/27 03:22:03 11 0
12 BACKGROUND sa . . NULL SYSTEM_HEALTH_MO 0 0 02/27 03:22:04 12 0
13 BACKGROUND sa . . NULL RECEIVE 312 2 02/27 03:22:04 13 0
14 sleeping sa . . master TASK MANAGER 0 159 03/12 22:46:23 14 0
15 sleeping sa . . master TASK MANAGER 0 1 03/12 22:46:23 15 0
16 BACKGROUND sa . . master CHECKPOINT 109 159 02/27 03:22:34 16 0
17 BACKGROUND sa . . master TASK MANAGER 0 0 02/27 03:22:34 17 0
18 BACKGROUND sa . . NULL UNKNOWN TOKEN 0 0 02/27 03:23:35 18 0
19 sleeping sa . . master TASK MANAGER 0 4 03/12 22:36:22 19 0
20 sleeping sa . . master TASK MANAGER 0 0 03/12 22:46:33 20 0
21 sleeping sa . . master TASK MANAGER 0 0 03/12 22:33:17 21 0
22 sleeping sa . . master TASK MANAGER 0 0 03/12 22:46:33 22 0
23 sleeping sa . . master TASK MANAGER 0 0 03/12 22:50:39 23 0
24 sleeping sa . . master TASK MANAGER 0 0 03/12 22:43:18 24 0
25 BACKGROUND sa . . master BRKR EVENT HNDLR 0 41 02/27 03:22:40 25 0
26 BACKGROUND sa . . master BRKR TASK 218 0 02/27 03:22:40 26 0
27 BACKGROUND sa . . master BRKR TASK 31 0 02/27 03:22:40 27 0
28 BACKGROUND sa . . master BRKR TASK 0 0 02/27 03:22:40 28 0
29 sleeping sa . . master TASK MANAGER 0 7 03/12 22:50:39 29 0
30 sleeping sa . . master TASK MANAGER 0 0 03/12 22:50:39 30 0
51 sleeping admin CGVAK-328 . master AWAITING COMMAND 157 283 03/13 01:15:51 Microsoft SQL Server Management Studio 51 0
52 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 16 1 03/13 01:33:08 Microsoft SQL Server Management Studio - Query 52 0
53 sleeping NT SERVICE\ReportServer$MSSQLSERVER2012 WIN-07VQ7EIB4L1 . ReportServer$MSSQLSERVER2012 AWAITING COMMAND 0 0 03/13 01:40:09 Report Server 53 0
54 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 218 0 03/13 01:28:50 jTDS 54 0
55 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 0 0 03/13 01:29:34 jTDS 55 0
56 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 376 5 03/13 01:31:11 jTDS 56 0
57 sleeping admin CGVAK-328 . master AWAITING COMMAND 16 38 03/13 01:40:22 Database Engine Tuning Advisor 57 0
58 sleeping NT SERVICE\ReportServer$MSSQLSERVER2012 WIN-07VQ7EIB4L1 . ReportServer$MSSQLSERVER2012 AWAITING COMMAND 0 0 03/13 01:41:14 Report Server 58 0
59 sleeping admin CGVAK-328 . master AWAITING COMMAND 0 0 03/13 00:50:47 Database Engine Tuning Advisor 59 0
60 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 125 7 03/13 01:17:27 Microsoft SQL Server Management Studio - Query 60 0
62 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 202 0 03/13 01:41:20 jTDS 62 0
63 sleeping admin CGVAK-328 . PUC AWAITING COMMAND 718 8 03/13 01:29:35 jTDS 63 0
64 SUSPENDED admin CGVAK-328 55 PUC DELETE 0 0 03/13 01:31:11 jTDS 64 0
65 sleeping admin DEVARAJ-PC . master AWAITING COMMAND 374 0 03/13 01:15:05 Microsoft SQL Server Management Studio 65 0
66 sleeping admin DEVARAJ-PC . PUC AWAITING COMMAND 0 0 03/13 01:31:50 Microsoft SQL Server Management Studio - Query 66 0
67 sleeping admin DEVARAJ-PC . master AWAITING COMMAND 0 0 03/13 01:31:46 Microsoft SQL Server Management Studio - Transact-SQL IntelliSense 67 0
68 sleeping admin DEVARAJ-PC . master AWAITING COMMAND 0 0 03/13 01:33:19 Microsoft SQL Server Management Studio - Transact-SQL IntelliSense 68 0
69 RUNNABLE admin CGVAK-328 . PUC SELECT INTO 31 8 03/13 01:33:29 Microsoft SQL Server Management Studio - Query 69 0
(48 row(s) affected)
以下是sys.dm_exec_请求中SELECT*的输出,其中阻塞_会话_id为0
我正在使用SQL Server 2012,下面是执行计划
<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.2" Build="11.0.3128.0" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
<BatchSequence>
<Batch>
<Statements>
<StmtSimple StatementCompId="1" StatementEstRows="1" StatementId="1" StatementOptmLevel="TRIVIAL" StatementSubTreeCost="0.0032831" StatementText="select * from sys_letter_intid" StatementType="SELECT" QueryHash="0x806EE30ADB72F191" QueryPlanHash="0x47B522D12A52B90C" RetrievedFromCache="true">
<StatementSetOptions ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" NUMERIC_ROUNDABORT="false" QUOTED_IDENTIFIER="true" />
<QueryPlan CachedPlanSize="8" CompileTime="0" CompileCPU="0" CompileMemory="56">
<MemoryGrantInfo SerialRequiredMemory="0" SerialDesiredMemory="0" />
<OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="104702" EstimatedPagesCached="9938" EstimatedAvailableDegreeOfParallelism="2" />
<RelOp AvgRowSize="85" EstimateCPU="0.0001581" EstimateIO="0.003125" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Clustered Index Scan" NodeId="0" Parallel="false" PhysicalOp="Clustered Index Scan" EstimatedTotalSubtreeCost="0.0032831" TableCardinality="1">
<OutputList>
<ColumnReference Database="[PUC]" Schema="[dbo]" Table="[sys_letter_intid]" Column="intid" />
<ColumnReference Database="[PUC]" Schema="[dbo]" Table="[sys_letter_intid]" Column="id" />
<ColumnReference Database="[PUC]" Schema="[dbo]" Table="[sys_letter_intid]" Column="misc_text" />
<ColumnReference Database="[PUC]" Schema="[dbo]" Table="[sys_letter_intid]" Column="misc_Date" />
<ColumnReference Database="[PUC]" Schema="[dbo]" Table="[sys_letter_intid]" Column="misc_amount" />
</OutputList>
<IndexScan Ordered="false" ForcedIndex="false" ForceScan="false" NoExpandHint="false">
<DefinedValues>
<DefinedValue>
<ColumnReference Database="[PUC]" Schema="[dbo]" Table="[sys_letter_intid]" Column="intid" />
</DefinedValue>
<DefinedValue>
<ColumnReference Database="[PUC]" Schema="[dbo]" Table="[sys_letter_intid]" Column="id" />
</DefinedValue>
<DefinedValue>
<ColumnReference Database="[PUC]" Schema="[dbo]" Table="[sys_letter_intid]" Column="misc_text" />
</DefinedValue>
<DefinedValue>
<ColumnReference Database="[PUC]" Schema="[dbo]" Table="[sys_letter_intid]" Column="misc_Date" />
</DefinedValue>
<DefinedValue>
<ColumnReference Database="[PUC]" Schema="[dbo]" Table="[sys_letter_intid]" Column="misc_amount" />
</DefinedValue>
</DefinedValues>
<Object Database="[PUC]" Schema="[dbo]" Table="[sys_letter_intid]" Index="[IDX_sys_letter_intid]" IndexKind="Clustered" />
</IndexScan>
</RelOp>
</QueryPlan>
</StmtSimple>
</Statements>
</Batch>
</BatchSequence>
</ShowPlanXML>
为了结束这个问题,感谢Michael Todd、Rbaryyoung和Phil Sandler的评论,SELECT花了很长时间,因为它被另一个进程阻止。在
SELECT
语句上使用WITH(NOLOCK)
绕过了更新锁(LCK\U M\U),允许语句继续
另请参见HOT theChunKk的评论,其中指出对事务使用不同的隔离级别(例如,
设置事务隔离级别read uncommitted
)是对SELECT
语句使用NOLOCK
的替代方法。可能使用了Begin Tran,如果在使用Begin tran命令后未使用诸如RollBack或Commit之类的封闭命令,则即使是简单的查询也会导致执行延迟。此表有多少行和哪些列?您真的需要表中的所有列(SELECT*
)和所有行(noWHERE
子句)?如果您真的需要该表中的所有内容-实际上没有“神奇”的方法来加速聚集索引扫描…该表上有锁吗?如果查询从未完成,您必须得到估计的执行计划,而不是实际的执行计划。因为它只有一行,你要么拥有地球上最慢的计算机,要么@MichaelTodd是正确的。尝试:从sys_letter_intid WITH(NOLOCK)FYI中选择*-使用(NOLOCK)时不需要WITH关键字select*from table(nolock)
works@John省略WITH关键字是不推荐使用的功能:此功能将在Microsoft SQL Server的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。这就是我的问题!我不明白为什么它被否决了?无论如何,谢谢D