Une instruction select simple est de prendre trop de temps
L'instruction select simple suivante est de prendre trop de temps à s'exécuter:
select * from sys_letter_intid
sys_letter_intid structure de la table:
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]
Pas sûr au sujet du nombre de lignes, parce que même SELECT COUNT(*) FROM sys_letter_intid et select top 1 * à partir de sys_letter_intid commande par intid desc requête prend trop de temps à s'exécuter.
- Index de l'Espace - 0.023 MO
- Nombre De Lignes - 1
- Données de l'Espace - 0.008 MO
sp_lock donne le résultat suivant:
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 donne le résultat suivant:
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)
Qui suit est le résultat de SELECT * from sys.dm_exec_requests où 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)
Je suis à l'aide de SQL Server 2012 et à la suite est le plan d'exécution.
<?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>
- Combien de lignes et ce genre de colonnes cette table? Et avez-vous vraiment besoin TOUS colonnes (
SELECT *
) et TOUS lignes (pas deWHERE
clause) à partir de votre tableau? Si vous avez vraiment besoin de tout à partir de cette table - il n'y a vraiment pas de "magie" afin d'accélérer l'analyse d'index cluster ..... - Oui @marc_s j'ai besoin de toutes les colonnes
- Cliquez-droit sur la table dans SSMS et cliquez sur Propriétés, puis Stockage. Vous devriez voir un nombre de lignes cotées.
- Si vous souhaitez que le nombre de lignes, il suffit d'utiliser
SELECT COUNT(*) FROM sys_letter_intid table
. VotreTOP 1
requête à l'aide deOrder by
, ce sera donc lente, surtout si il y a beaucoup de lignes, et pas deindex
. - J'ai mis à jour sur le nombre de lignes.
- Est-il un verrou sur la table?
- Si la requête ne se termine jamais, vous devez obtenir l'estimation du plan d'exécution, et non pas le réel. Depuis il a une ligne, soit vous avez le plus lent de l'ordinateur sur la terre ou @MichaelTodd est correct. Essayez: select * from sys_letter_intid AVEC (NOLOCK)
- Vous devriez éviter de nommer les tables qui commencent par
sys
. Mais d'autres que votre serveur est l'éther fixé de sorte qu'il ne peut même pas le processus simple en sql ou quelque chose a un verrou sur une table qui n'est pas publié. - Merci @PhilSandler AVEC(NOLOCK) fonctionne.
- Important: Combien de temps cela prend-il pour produire ce plan de requête?
- Qu'est-ce que proc 56 en train de faire? Quel qu'il soit est probablement le blocage de cette requête en cours d'exécution.
- Est-ce à
SELECT * FROM sys.dm_exec_requests where blocking_session_id <>0
retourne rien? - J'ai mis à jour la question
- J'ai couru un SP_Who2 et voir si le Spid sont le blocage de votre processus.
- J'ai mis à jour la question
- Si vous êtes SPID 64, bloqué par SPID 55. Vous avez besoin pour traquer CGVAK-328 et leur dire de fermer leur connexion à SPID 55 parce que vous avez besoin d'accéder à votre table et c'est le blocage de vous.
- FYI - Vous n'avez pas besoin de la clé lors de l'utilisation (NOLOCK).
select * from table (nolock)
œuvres. - L'omission du mot-clé est une fonctionnalité obsolète: Cette fonction sera supprimée dans une future version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et le plan de modifier les applications qui utilisent actuellement cette fonction. technet.microsoft.com/en-us/library/ms187373.aspx
- Bon à savoir, merci pour l'information.
- Si vous avez une tonne de tables dans le lot de l'exécution, vous pouvez au lieu de type
set transaction isolation level read uncommitted
en haut de la requête de lot, et l'effet est essentiellement la même que si(nolock)
conseils sur chaque table que vous achetez à partir. - Avez-vous définir la clé primaire de la table, dans ce cas, je pense que [id] devrait être la clé primaire.
Vous devez vous connecter pour publier un commentaire.
Pour clore cette question, avec le crédit aux commentaires de Michael Todd, RBarryYoung, et Phil Sandler, le SELECT a été longue car il était bloqué par un autre processus. À l'aide de
WITH (NOLOCK)
sur leSELECT
déclaration contourné le verrou de mise à jour (LCK_M_U), permettant à l'état de procéder.Voir aussi CHAUD theChunKk commentaire de noter que l'utilisation d'un autre niveau d'isolation de la transaction (par exemple
set transaction isolation level read uncommitted
) est une alternative à l'utilisation deNOLOCK
sur leSELECT
consolidés.Peut être Utilisé Begin Tran, Qui sont la Cause Même de la Simple Requête À Exécuter en Retard Si l'affichage de la Commande comme Restauration Ou Commettre n'est pas Utilisé Après l'Utilisation de la Begin tran Commande.