記憶體資料庫到底有多快

2022-01-31 18:15:50 字數 1684 閱讀 5469

併發量太高的應用中(比如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。當物理記憶體將被消耗完時,管理器就開始將記憶體頁面對映到硬碟。在預設的設定下,作業系統會用硬碟的所有可用空間來作為磁碟交換檔案。因此,記憶體的限制並...