2014-03-12 24 views
3

下面這個簡單的SELECT語句正在採取太多的時間來執行:一個簡單的SELECT語句被耽誤了很多時間

select * from sys_letter_intid 

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] 

不能確定行數,因爲即使SELECT COUNT(*)FROM sys_letter_intid並從sys_letter_intid中選擇top 1 * by intid desc查詢所花費的時間太長,無法執行。

  • 索引空間 - 0.023 MB
  • 行計數 - 1
  • 數據空間 - 0.008 MB

sp_lock的給出了以下的輸出:

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 

SP_Who2給出了下面的輸出:

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) 

以下是輸出SELECT * FROM sys.dm_exec_requests視圖,其中blocking_session_id <> 0

session_id request_id start_time    status       command       sql_handle                               statement_start_offset statement_end_offset plan_handle                              database_id user_id  connection_id      blocking_session_id wait_type             wait_time last_wait_type            wait_resource                                                             open_transaction_count open_resultset_count transaction_id  context_info                                                              percent_complete estimated_completion_time cpu_time total_elapsed_time scheduler_id task_address  reads    writes    logical_reads  text_size language                               date_format date_first quoted_identifier arithabort ansi_null_dflt_on ansi_defaults ansi_warnings ansi_padding ansi_nulls concat_null_yields_null transaction_isolation_level lock_timeout deadlock_priority row_count   prev_error nest_level granted_query_memory executing_managed_code group_id query_hash   query_plan_hash 
---------- ----------- ----------------------- ------------------------------ -------------------------------- ---------------------------------------------------------------------------------------------------------------------------------- ---------------------- -------------------- ---------------------------------------------------------------------------------------------------------------------------------- ----------- ----------- ------------------------------------ ------------------- ------------------------------------------------------------ ----------- ------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------- -------------------- -------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------- ------------------------- ----------- ------------------ ------------ ------------------ -------------------- -------------------- -------------------- ----------- -------------------------------------------------------------------------------------------------------------------------------- ----------- ---------- ----------------- ---------- ----------------- ------------- ------------- ------------ ---------- ----------------------- --------------------------- ------------ ----------------- -------------------- ----------- ----------- -------------------- ---------------------- ----------- ------------------ ------------------ 
64   0   2014-03-13 01:31:11.927 suspended      DELETE       0x0200000095E2BC33A9AC347266EB7BD07B54F63FA636143300000000000000000000000000000000             0      -1     0x0600080095E2BC3330BCFB1501000000000000000000000000000000000000000000000000000000             8   1   07E2265C-3159-4099-B6DF-8B2A8FCA4BB9 55     LCK_M_U              137240  LCK_M_U              KEY: 8:72057596467675136 (915ffb6f1e99)                                                       2      1     6920013    0x                                                                 0    0       0   137240    1   0x638702F8   0     0     2     2147483647 us_english                              mdy   7   1     0   1     0    1    1   1   1      2       -1   0     0     0   1   0     0      1   0x83FE4907FA5F0EF2 0x873EF4A76D497C0C 

(1 row(s) affected) 

我使用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> 
+2

這張桌子有多少**行**和什麼樣的**列**?你真的**需要**表中的所有**列('SELECT *')和** ALL **行(沒有'WHERE'子句)嗎?如果你真的需要** **一切從表 - 真的沒有「神奇」的方式,以加快聚集索引掃描..... –

+0

是@marc_s我需要的所有列 – Leejoy

+0

右鍵單擊SSMS的表,然後單擊屬性,然後存儲。您應該看到列出的行數。 – JiggsJedi

回答

1

要關閉了這個問題,以信譽邁克爾·託德,RBarryYoung和菲爾·桑德勒的意見,選擇了花費很長的時間,因爲它被阻止通過一個又一個的過程。在SELECT語句上使用WITH (NOLOCK)可以繞過更新鎖定(LCK_M_U),從而允許繼續執行語句。

另請參見HOT theChunk的評論,指出對事務使用不同的隔離級別(例如set transaction isolation level read uncommitted)是在SELECT語句中使用NOLOCK的替代方法。

-1

可能使用開始陳德良,導致即使是簡單的查詢執行後期如果封裝的命令一樣回滾或者提交不使用使用BEGIN TRAN命令後。