程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server備份讀寫揭秘

SQL Server備份讀寫揭秘

編輯:關於SqlServer

下圖顯示了數據庫備份時文件讀寫的過程:

 


在備份期間,SQL Server會在數據庫文件這邊為每一盤符(Volume)創建一個讀線程。讀線程的工作很簡單,就是從文件中的數據內容。每次這個線程都會從文件中讀出部分數據,然後把數據存到緩沖中(buffer)。因為有多個緩沖可用,所以只要有緩沖可以寫入數據,讀線程可以不停的讀數據。SQL Server也同時創建一個寫線程,把緩沖中的數據寫入磁盤或是磁帶機上。一旦緩沖中的數據被寫線程寫到其他介質中後,那麼讀線程就可以再次重用這個緩沖區了。 例如如下命令: BACKUP DATABASE AdventureWorks TO
   DISK = 'M:\backups\AdventureWorks_FULL_01.bak',
   DISK = 'N:\backups\AdventureWorks_FULL_02.bak'
WITH BUFFERCOUNT = 10, MAXTRANSFERSIZE = 1048576 假設AdventureWorks文件被分別存儲在三個盤符中,備份過程就如下圖所示:    
注意:SQL Server不能區分邏輯盤符和物理盤符。例如上面的例子,假如E:\,F:\和G:\是物理磁盤上的三個分區,那麼仍然有三個讀線程在讀取數據文件。如果你的磁盤不能滿足這個讀取需求,那麼備份的吞吐量就會受到極大的影響。 如果沒有使用BUFFERCOUNT和MAXTRANSFERSIZE這兩個參數的話,SQL Server會自動決定為每個buffer分配多少空間。備份buffer的總空間約為BUFFERCOUNT*MAXTRANSFERSIZE(bytes)加上一些額外的頭文件。這些內存來自非緩存池內容區域,就是被稱做MemToLeave的內存區域。如果你指定的空間大於可用空間,SQL Server會提示如下錯誤: Server: Msg 701, Level 17, State 1, Line 1
There is insufficIEnt system memory to run this query.
Server: Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally. 如果你想確定SQL Server備份時緩沖(buffer)的大小和數據,你可以打開3605和3213的Trace標識。SQL Server日志裡面記錄的值類似於: 2008-07-14 17:21:20.65 spid51 BufferPoolLimit: 100 MB
2008-07-14 17:21:20.65 spid51 Backup/Restore buffer configuration parameters
2008-07-14 17:21:20.65 spid51 Buffer count: 15
2008-07-14 17:21:20.65 spid51 Max transfer size: 983040
2008-07-14 17:21:20.65 spid51 Total buffer space: 14 MB
2008-07-14 17:21:20.65 spid51 Buffers per read stream: 15
2008-07-14 17:21:20.65 spid51 Buffers per write stream: 5
2008-07-14 17:21:20.65 spid51 Memory Limit: 100 MB
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved