Dauer eines select count(*) dauert bis zu 10 Minuten

05/07/2009 - 22:59 von Fudzzi | Report spam
Hallo NG,

meine Tabelle hat 10 Mio DS. In unsererem Programm wird zwischendurch wird
ein select count(*) from TABELLE where <6 Bedingungen> gemacht.

zu 98 % geht dieses Kommando super schnell
in 2 % der Fàlle benötigt das Statement bis zu 10 Minuten

Was ist hierfür die Ursache??

SQL Server 2005 SP2 Standard Edition
Windows 2003 Server
1 mal am Tag wird eine "update statistics" durchgeführt.
Am Tag kommen ca 1000 neue DS dazu.
die 6 Bedingungen in der where-Clause haben alle einen Index.

Vielen Dank im Voraus

Olaf Thon
 

Lesen sie die antworten

#1 Elmar Boye
06/07/2009 - 09:29 | Warnen spam
Hallo Olaf,

Fudzzi schrieb:
meine Tabelle hat 10 Mio DS. In unsererem Programm wird zwischendurch wird
ein select count(*) from TABELLE where <6 Bedingungen> gemacht.

zu 98 % geht dieses Kommando super schnell
in 2 % der Fàlle benötigt das Statement bis zu 10 Minuten

Was ist hierfür die Ursache??



Dafür kann die Ursache eine Blockierung der Tabelle durch
eine andere Sitzung sein, die die Tabelle aktualisisiert und
sehr lange eine Sperre hàlt.

die 6 Bedingungen in der where-Clause haben alle einen Index.



Das dürfte überindiziert sein.
Denn auch wenn der SQL Server durchaus in der Lage ist mehrere
Indizes für eine Klausel zu nutzen, ist es unwahrscheinlich das
er sechs davon nutzt.

Für die Tabelle kannst Du die Nutzung von Indizes anhand der Sicht
sys.dm_db_index_usage_stats kontrollieren:
http://msdn.microsoft.com/de-de/library/ms188755(SQL.90).aspx

Indizes, die nur selten benötigt werden, verbrauchen unnötige
Ressourcen und sollten gelöscht werden.

Für die Abfrage selbst: Überprüfe mal den Abfrageplan im Management Studio,
welche Indizes faktisch genutzt werden.
Eher als Notlösung: Ein WITH (NOLOCK) Hinweis, der Sperren ignoriert
kann das Problem beheben (liefert aber u. U. falsche Ergebnisse).

Gruß Elmar

Ähnliche fragen