2015-07-03 24 views
1

任何人都遇到過這個問題嗎?一個簡單的插入語句需要7秒鐘,而這個表格包含300行記錄。這張桌子上沒有觸發器。簡單插入語句中的SQL Server緩慢

表:

CREATE TABLE [dbo].[Table] 
(
    [intMsgIn] [int] IDENTITY(1,1) NOT NULL, 
    [charType] [char](4) NOT NULL, 
    [dtTrx] [datetime] NOT NULL, 
    [varMsg] [varchar](4000) NULL, 

    CONSTRAINT [PK_Tbl] PRIMARY KEY CLUSTERED ([intMsgIn] ASC) 
     WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
       IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
       ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

SQL語句:

INSERT INTO Table (charType, dtTrx, varMsg) 
VALUES(@charType, getdate(), @varMsg) 

SELECT @@IDENTITY 

這個SQL語句是存儲過程的代碼,然後是C#應用程序調用。

任何可能的原因導致這種緩慢?

+0

DB還在做什麼?有沒有可能會鎖定表的查詢? –

+6

我建議使用**'SCOPE_IDENTITY()**而不是其他任何東西(如'@@ IDENTITY')來獲取新插入的標識值。 [請參閱此博客文章,瞭解有關WHY的解釋](http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity -of-record /) –

+6

請注意,不要使用'@@ IDENTITY',使用'SCOPE_IDENTITY()'。 – Kaf

回答

0

只是一個簡單的提示。再試一次,看看sp_who2 N'ACTIVE'。它應該會顯示所有正在運行的查詢。你會有一個名爲BlkBy的專欄。

由於您的查詢非常簡單,我確定應該有任何類型的鎖。 BlkBy列會給你SPID阻止你的任務。在這種情況下,您可以重新檢查是否有併發的INSERT,UPDATEDELETE-生成另一個鎖的語句。

如果這將快速測試sp_who2,您還可以設置跟蹤並檢查結果,如果您的INSERT期間有任何鎖定。