Sql-Server

什麼限制了每秒的批處理請求

  • April 10, 2016

我們有一個新創建的 Azure SQL Server 2014 實例。伺服器的規格如下

在此處輸入圖像描述

我知道,非常赤裸裸的骨頭。由於這只是一個測試伺服器,我們選擇在C:\驅動器本身上設置數據文件。

我們想做一些性能測試,看看它與本地解決方案相比會是什麼樣子。為此,我們使用下表創建了一個數據庫:

CREATE TABLE [dbo].[temptbl_1](
   [seq] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
   [field1] [varchar](50) NOT NULL,
   [field2] [int] NOT NULL,
   [field3] [datetime] NOT NULL,
CONSTRAINT [PK_temptbl_1] PRIMARY KEY CLUSTERED 
(
   [seq] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

然後,我們在整個數據庫上執行更新統計資訊。然後我們執行下面的插入語句來看看我們會得到什麼樣的結果:

insert into dbo.temptbl_1 (field1, field2, field3)
select 'here is a great big string',123456, getdate()
go 10000

我們第一次從我本地機器的 SSMS(2016 預覽版)執行它時,震驚地發現它花了大約 9 分鐘!

然後,我們在 SSMS 中再次從伺服器本身執行查詢,耗時約 2 分鐘。這似乎更合理。但是為什麼客戶需要這麼長時間呢?

觀察活動監視器,我可以看到,當查詢從我的本地電腦執行時,每秒的批處理請求數從未超過 20。做數學計算,你可以看到為什麼這永遠不會超過 8-9 分鐘。但是,當從伺服器執行查詢時,我們可以看到每秒的批處理請求數一直上升到 100。

我們已嘗試盡可能多地閱讀,並查看了設置,但無法弄清楚為什麼它似乎限制了來自本地電腦的查詢,但來自伺服器的查詢似乎也沒有。

為什麼伺服器似乎限制了來自我的工作站的查詢,但從伺服器本身執行時卻沒有?

這只是一個純粹的猜測(我找不到任何支持這一點的東西),但我相信在本地機器上執行它時速度要慢得多的原因是它正在本地機器上進行迭代。

如果您將其作為游標執行,我相信這將處理 SQL 中的所有內容並且速度更快。

AKAGO 10000正在從您的本地迭代 10000 次,因此它還必須擔心每個語句的網路。

引用自:https://dba.stackexchange.com/questions/105812