併發量太高的應用中(比如10分鐘內插入300w條記錄),資料庫往往難堪重負,在沒有銀子實現伺服器集群/負載均衡/分布式儲存的情況下,可以嘗試一下把資料庫做乙個臨時副本全部放在記憶體中處理,完成操作後,再同步到硬碟的物理資料庫中。
那麼,把資料庫放在記憶體中到底有多快? 晚上抽空試了一下:
步驟1:先用ramdisk之類的工具,劃出一塊記憶體當作虛擬硬碟.
步驟2:先在sql2005中新建乙個空庫db,然後分離,把分離後的資料庫檔案複製到虛擬硬碟中,並附加回資料庫,至此完成資料庫在記憶體中的建立。
步驟3:建乙個測試表test
code
use[db]
go/*
***** 物件: table [dbo].[test] 指令碼日期: 06/15/2009 21:55:24 *****
*/set
ansi_nulls
ongo
setquoted_identifier
ongo
create
table
[dbo].
[test](
[id][
bigint
]identity(1
,1) not
null,[
name][
nvarchar](
50) collate chinese_prc_ci_as
notnull
,constraint
[pk_test
]primary
keyclustered([
id]asc)
with
(pad_index
=off
, statistics_norecompute
=off
, ignore_dup_key
=off
, allow_row_locks =on
, allow_page_locks =on
) on
[primary])
on[primary
]步驟4:直接在查詢介面中寫乙個迴圈,插入300w條資料,見下圖:
在我的筆記本上,共耗時6分50秒,資料庫檔案增加到近280m
步驟5:測試一次性查詢300w條資料
耗時2分鐘2秒
步驟6:清空表後,對name欄位做索引,重複插入300w資料
步驟6:重複剛才的查詢
fseek讀,到底有多快!
常聽人說,fseek很快 到底多快?如果不知道多快,就乙個勁的爭論很快!好像不必擔心的快一樣。這種常識性的東西不知道,妄談系統設計,就會出笑話的。下面做個實驗,測測fseek的量級。測試的方法 1.乙個檔案512m 2.乙個執行緒對應乙個檔案,然後在這個檔案裡邊進行rand fseek,然後讀1k位...
到底有多少記憶體
在虛擬記憶體模型下,理論上有 2gb的記憶體供程式使用。當 virtualalloc 或者其他函式提交虛擬記憶體時,虛擬記憶體管理器就開始消耗 ram。當物理記憶體將被消耗完時,管理器就開始將記憶體頁面對映到硬碟。在預設的設定下,作業系統會用硬碟的所有可用空間來作為磁碟交換檔案。因此,記憶體的限制並...
到底有多少記憶體
在虛擬記憶體模型下,理論上有 2gb的記憶體供程式使用。當 virtualalloc 或者其他函式提交虛擬記憶體時,虛擬記憶體管理器就開始消耗 ram。當物理記憶體將被消耗完時,管理器就開始將記憶體頁面對映到硬碟。在預設的設定下,作業系統會用硬碟的所有可用空間來作為磁碟交換檔案。因此,記憶體的限制並...