我需要將現有的應用程序移至windows azure虛擬機。此應用程序將大量數據(插入到)寫入數據庫。當我向磁盤寫入大量數據時,Azure虛擬機上的sql server性能不佳
因此,我在Azure虛擬機上創建了一個SQL Server計算機,並根據Azure虛擬機上的SQL Server的Microsoft最佳實踐(http://msdn.microsoft.com/en-us/library/azure/dn133149.aspx)配置了該環境。
我測試這個SQL查詢我的電腦上,並在Azure VM我的SQL Server上:
WHILE @i <= 100000 BEGIN
INSERT INTO sales (id, created) VALUES (@i, GETDATE());
SET @i = @i + 1;
END
當我跑我的機器43秒後其完成此查詢。 當我在蔚藍的虛擬機上運行這個查詢時,它需要花費10分鐘! (我嘗試使用單個磁盤並使用2個和4個磁盤進行分條)。
我嘗試測試多個場景代碼,與交易:
WHILE @i <= 100000 BEGIN
-- Start a transaction
IF @i % 10000 = 1
BEGIN TRANSACTION;
INSERT INTO sales (id) VALUES (@i);
SET @i = @i + 1;
-- Commit after each 10,000 row
IF @i % 10000 = 0
COMMIT;
END
這種情況下工作確定在兩個環境中(我的電腦&蔚藍VM)。
當我在sql azure VM服務器上運行SQLIO時,得到的結果適合第二個查詢結果(包含事務)。
我的應用程序必須在沒有事務的情況下運行。
有人知道如何解決這個問題嗎? 謝謝。
如果你只是比較物理硬件的速度與虛擬機,這個問題不適合在StackOverflow。也許ServerFault可能會更好?無論如何,在目前的形式下,您甚至不包括機器大小,無論是爲自己的機器還是部署的VM。即使您將此內容發佈到ServerFault,它仍然是無法回答的。 – 2014-09-01 11:09:46
那麼日誌存儲在磁盤上呢?通過嘗試在單個事務中一次寫入一行,會給日誌造成巨大的壓力。無論如何,如果你想寫這樣的數據到數據庫,有更好的方法,比如做一個INSERT/SELECT來一次從源數據中提取數據。也許,如果您發佈了* actual *查詢,我們可以幫助您解決它 – 2014-09-01 11:22:48