簡體   English   中英

如何在SQL Server 2012群集上創建最快的數據庫,犧牲任何持久性

[英]How to create the fastest possible database on a SQL Server 2012 cluster, sacrificing any durability

我有一個針對SQL Server 2012群集中的數據庫運行的測試套件。 我希望這個測試套件盡可能快地運行。 我願意為性能犧牲每一種耐用性和可用性保證 在每次測試運行期間都會重新創建數據庫,因此它甚至不必在服務器重新啟動后繼續運行。

使用ALTER DATABASE [dbname] SET RECOVERY SIMPLE更改恢復模型ALTER DATABASE [dbname] SET RECOVERY SIMPLE沒有明顯的區別。

一個很好的選擇似乎是DELAYED_DURABILITY ,但這是2014年的新功能,因此對我來說無法使用。

如何在此群集上創建一個瘋狂的快速數據庫? 我試圖尋找內存數據庫,但找不到任何選項。 群集將不允許我在本地磁盤上創建數據庫,堅持它必須位於群集磁盤上。

更新:該應用程序使用高級SQL Server功能,所以我很可能堅持使用MS SQL Server。 數據庫本身非常小,因為它用於測試(8MB mdf,1MB ldf)。 群集節點是網絡中速度最快的服務器,因此如果我可以將其中一個節點誤用於內存數據庫,那肯定是最快的。 但是怎么樣?

如果由於某種原因你被困在一個集群的sql server實例上,但你不想要持久性,也許你可以在tempdb上運行你的應用程序。 可以將Tempdb放在本地存儲上以避免群集開銷。

另請注意,存儲在tempdb上的數據最初將保留在緩沖池(即RAM內存)中,並且只能異步溢出到磁盤,因為sql server引擎可以更好地使用該內存空間。

您可以通過編寫所有數據庫對象的腳本並使用文本編輯器將數據庫的名稱替換為“tempdb”來實現此解決方案。 然后執行此腳本以在tempdb上創建所有對象。 還要將運行應用程序的用戶的初始目錄設置為tempdb和/或編輯所需的連接字符串。 請記住,每次重新啟動實例時都會重新生成tempdb。 因此,您將丟失所有數據和ddl更改。

這絕對是“犧牲每一種耐用性和可用性保證”的最佳努力。

可以這樣的工作( doc )嗎?

CREATE DATABASE Sales
ON 
( NAME = Sales_dat,
    FILENAME = 'R:\saledat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )

其中R:RAM驅動器

如果要在本地磁盤上創建數據庫,可以通過在共享上創建群集限制來繞過群集限制。

您必須創建一個放置在群集的本地磁盤上的共享文件夾; 然后使用UNC補丁創建數據庫(例如:\\\\ share \\ DATA \\ data.mdf); 2012年應該沒有限制,2008年你必須使用Trace標志1807;

使用稱為Continuous Attach-Detach的技術快速建立快速數據庫:

我打賭你知道如何分離數據庫,但作為提醒運行如下:

EXEC sp_detach_db

在此階段,SQL Server假定您已將其刪除。 現在使用以下內容附加到現有文件:EXEC sp_attach_db @dbname = N'myD',@ filename1 = N'myCurrentPath',@ filename2 = N'pathToNewFile'

好。 這很容易但是我創建的這些新文件是如何創建的? 通過一個非常小且極其簡單的.NET CSharp控制台應用程序,它將.mdf和.ldf的內容讀入內存並將其寫入您選擇的文件:

讀取和寫入新創建的數據文件

整個情況如何觸發? 使用DDL觸發器附加數據庫觸發器,如中所述

附加數據庫觸發器

關鍵點是附加到已經讀過(一次)的已經存在的文件 - 將[多次]寫入內存[使用您選擇的程序,例如CSharp],這樣您就可以附加數據庫而無需額外的開銷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM