2010-11-14 205 views
1

有些可以幫助我理解緩衝區寫入是什麼嗎?我特別感興趣的是在上下文數據庫系統中學習它的功能,MySQL說!以下一些將是有益的:什麼是緩衝區寫入?

  1. 什麼是緩衝的目的寫
  2. 是否有任何性能優勢
  3. 在數據庫應用

我的緩衝區寫入的例子幾次遇到這個詞,我無法辨別它的意義。

謝謝

回答

1

想象一下帶有100M內存的計算機,運行數據庫。數據庫將數據存儲在文件中,但也將其中的50M保存在緩衝區的內存中。如果有數據請求(SELECT或INSERT),則可以從內存中的緩衝區處理該請求,這要比一直到磁盤的速度快得多。

訪問數據庫文件中的信息的緩衝請求本質上是對磁盤I/O的高速緩存請求。如果信息在很短的時間內被INSERT-DEL然後刪除,寫入磁盤可能是不必要的。不寫(緩衝區)大大提高了性能。

如果存在作爲INSERT 100M數據到數據庫的請求,則必須完成所有掛起寫入(從緩衝區到磁盤)。然後至少有一半的新數據被寫入磁盤。數據必須寫入,因爲沒有足夠的內存用於100M新數據加上50M舊數據全部駐留在內存中。將一些現有緩衝區寫入磁盤的這種必要性是性能問題。幸運的是,只有保存更改的緩衝區或需要寫出(或刷新)到磁盤的新記錄。那些改變的緩衝區被稱爲「髒」。

經過前面提到的100M的INSERT之後,大約50M的新數據可能暫時保存在內存中,直到最方便的寫入 - 因爲寫入不會提高性能。將寫更改的記錄寫回磁盤的方便時間是系統閒置一段時間後的時間。當系統空閒時寫入(緩衝區寫入)不會降低性能。

+0

謝謝Frayser,我很欣賞這種迴應。這是數據庫自動執行的操作,還是必須自己設置?我想這取決於數據庫,但作爲一個普遍的想法... – Mohamad 2010-11-18 01:09:20

+1

所有主要數據庫PostgreSQL,MySQL,Oracle,Sysbase,MsSQL等都有和管理緩衝區的緩存。這通常不是人們配置的東西;但根據數據庫供應商和表設計,有參數可以調整。這些調整通常由數據庫管理員在有特殊需求時完成。對於任何給定的數據庫,進行這種調整的細節可以在手冊的「調整」部分找到。這裏是[調整MySQL的參考鏈接](http://dev.mysql.com/doc/refman/5.1/en/server-parameters.html) – frayser 2010-11-18 12:08:28