Update dauert sehr lange

sbraun71

Neuer Benutzer
Beiträge
1
Guten Abend,

ich betreue eine ältere Perl-Anwendung, die über ODBC auf einen MSSQL-Server 2012 zugreift.
Sie hat einen PK und einen Index, der speziell auf den Update passt:

Tabelle:
CREATE TABLE [dbo].[Abo_Kunde](
[KundenID] [int] NOT NULL,
[g_von] [datetime] NULL,
[g_bis] [datetime] NULL,
[AboID] [int] NULL,
[MutDatum] [datetime] NULL,
[MutUser] [int] NULL,
[ID] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_Abo_Kunde] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Index:
CREATE NONCLUSTERED INDEX [Abo_Kunde_KundenID_gbis] ON [dbo].[Abo_Kunde]
(
[KundenID] ASC,
[g_bis] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

Wenn ich nun die Abfrage

UPDATE [abo2006].[dbo].Abo_Kunde SET g_bis = GETDATE(), MutDatum = GETDATE(), MutUser = 15 WHERE (KundenID = 458134) AND (g_bis IS NULL)
ausführe, dauert diese mehrere Minuten, aber schlussendlich wird der Datensatz korrekt upgedated.

Auch das zurücksetzen mit
UPDATE [abo2006].[dbo].Abo_Kunde SET g_bis =null, MutDatum = GETDATE(), MutUser = null WHERE (KundenID = 458134) AND id = 1159336
dauert gleich lang, funktioniert aber auch.

Hat jemand einen Tipp, wie ich das Problem analysieren kann?

Vielen Dank und Grüsse

Stefan
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.394
Wieviele Datensätze hat denn die Tabelle und wieviele sind von dem Update betroffen?

Führst du das Update über ODBC oder im SQL Management Studio aus? Wenn ersteres, bitte mal vergleichen.

Ansnsonsten sehe ich hier auch noch kein Problem. In letzter Konsequenz müsste man aber auch gucken was die Hardware macht.
 
Werbung:

gurbelunder

Datenbank-Guru
Beiträge
136
UPDATE [abo2006].[dbo].Abo_Kunde SET g_bis = GETDATE(), MutDatum = GETDATE(), MutUser = 15 WHERE (KundenID = 458134) AND (g_bis IS NULL)

Aufgrund der KundenID Festlegung würde ich behaupten, dass nicht besonders viele Datensätze geupdatet werden. Dafür müsste man aber mal die Tabelle im Aufbau sehen. Sinds wirklich nur wenige?

Ich könnte mir evtl. auch vorstellen, dass das GETDATE() langsam zu heftig wird für die Maschine, auf der die Datenbank liegt, wenn es wirklich Low Hardware ist. Aber ansonsten sehe ich auch erstmal keinen Grund.
 
Oben