鬼佬大哥大
  • / 14
  • 下載費用:30 金幣  

一種提高數據庫性能的方法及裝置.pdf

摘要
申請專利號:

CN201510424929.1

申請日:

2015.07.17

公開號:

CN105045874A

公開日:

2015.11.11

當前法律狀態:

授權

有效性:

有權

法律詳情: 授權|||實質審查的生效IPC(主分類):G06F 17/30申請日:20150717|||公開
IPC分類號: G06F17/30 主分類號: G06F17/30
申請人: 浪潮(北京)電子信息產業有限公司
發明人: 楊磊
地址: 100085北京市海淀區上地信息路2號2-1號C棟1層
優先權:
專利代理機構: 北京安信方達知識產權代理有限公司11262 代理人: 解婷婷; 曲鵬
PDF完整版下載: PDF下載
法律狀態
申請(專利)號:

CN201510424929.1

授權公告號:

||||||

法律狀態公告日:

2018.06.12|||2015.12.09|||2015.11.11

法律狀態類型:

授權|||實質審查的生效|||公開

摘要

本發明公開了一種提高數據庫性能的方法及裝置,包括:初始化內存盤;建立所述內存盤要掛載的目錄,將初始化后的內存盤掛載到所建立的目錄中;在內存盤所掛載的目錄中創建數據庫,通過所述內存盤存儲數據庫的數據文件。本發明中所有數據庫操作將不會引起磁盤I/O,從而提高了數據庫的響應時間和并發度,改善了數據庫的性能。

權利要求書

1.一種提高數據庫性能的方法,其特征在于,包括:
初始化內存盤;
建立所述內存盤要掛載的目錄,將初始化后的內存盤掛載到所建立的目
錄中;
在內存盤所掛載的目錄中創建數據庫,通過所述內存盤存儲數據庫的數
據文件。
2.根據權利要求1所述的方法,其特征在于,所述方法還包括:
在內存盤所掛載的目錄中創建數據庫后,還將所述數據庫的日志文件指
定到內存盤所掛載的目錄存放。
3.根據權利要求2所述的方法,其特征在于:
所述初始化內存盤包括:初始化多個內存盤;
所述在內存盤所掛載的目錄中創建數據庫包括:根據CPU的數目,創
建多分區的數據庫,其中每個分區的數據庫均單獨創建在一內存盤所掛載的
目錄中。
4.根據權利要求3所述的方法,其特征在于,所述將所述數據庫的日志
文件指定到內存盤所掛載的目錄存放,包括:
計算日志文件的大小,根據日志文件的大小,從初始化后的多個內存盤
中選擇一滿足日志文件的大小需要且未創建數據庫的內存盤,將日志文件指
定到選擇的內存盤所掛載的目錄存放。
5.根據權利要求1~4任意之一所述的方法,其特征在于,在內存盤所
掛載的目錄中創建數據庫后,還對數據庫進行以下任意一項或多項的參數配
置包括:
(1)關閉數據庫的自動調整內存的功能;
(2)將數據庫的緩沖池的大小配置為至少容納下所有未完成的事務和未
完成的查詢所需占用的數據頁;
(3)根據對數據庫的讀操作的需要配置數據庫的索引的數量。
6.根據權利要求1~4任意之一所述的方法,其特征在于,所述方法還
包括:
在初始化內存盤后,還根據系統資源情況修改內存盤的大小;并且,
在將初始化后的內存盤掛載到所建立的目錄中后,還修改所述目錄及內
存盤的訪問權限,并為內存盤配置用戶組。
7.一種提高數據庫性能的裝置,其特征在于,包括:初始化單元、掛載
單元和數據庫創建單元,其中:
所述初始化單元,用于初始化內存盤;
所述掛載單元,用于建立所述內存盤要掛載的目錄,將所述初始化單元
初始化后的內存盤掛載到所建立的目錄中;
所述數據庫創建單元,用于在內存盤所掛載的目錄中創建數據庫,通過
所述內存盤存儲數據庫的數據文件。
8.根據權利要求7所述的裝置,其特征在于:
所述數據庫創建單元,還用于在內存盤所掛載的目錄中創建數據庫后,
將所述數據庫的日志文件指定到內存盤所掛載的目錄存放。
9.根據權利要求8所述的裝置,其特征在于:
所述初始化單元初始化內存盤包括:初始化多個內存盤;
所述數據庫創建單元在內存盤所掛載的目錄中創建數據庫包括:根據
CPU的數目,創建多分區的數據庫,其中每個分區的數據庫均單獨創建在一
內存盤所掛載的目錄中。
10.根據權利要求9所述的裝置,其特征在于:
所述數據庫創建單元將所述數據庫的日志文件指定到內存盤所掛載的目
錄存放,包括:計算日志文件的大小,根據日志文件的大小,從初始化后的
多個內存盤中選擇一滿足日志文件的大小需要且未創建數據庫的內存盤,將
日志文件指定到選擇的內存盤所掛載的目錄存放。

說明書

一種提高數據庫性能的方法及裝置

技術領域

本發明涉及計算機系統領域和數據庫領域,尤指一種提高數據庫性能的
方法及裝置。

背景技術

OLTP全稱為onlinetransactionprocessing,即在線交易處理,OLTP用戶
比較關注數據庫的并發度和響應時間,其中響應時間會直接影響用戶的最終
體驗。典型的OLTP系統有電子商務系統、銀行業務系統和證券業務系統等,
如淘寶、eBay的業務數據庫,就是很典型的OLTP數據庫。

在OLTP數據庫中磁盤子系統容易成為瓶頸。磁盤子系統在整個計算機
體系中,性能最慢,更新換代的頻率也遠低于CPU與內存。

磁盤子系統在OLTP環境中,與數據庫的響應時間緊密相聯,OLTP系統
的數據塊變化非常頻繁,因此,磁盤子系統已成為提高數據庫的響應時間的
制約因素。

發明內容

為了解決上述技術問題,本發明提供了一種提高數據庫性能的方法及裝
置,能夠避免磁盤子系統對數據庫的響應時間的制約,提高數據庫的響應時
間和并發度。

為了達到本發明目的,本發明提供了一種提高數據庫性能的方法,包括:

初始化內存盤;

建立所述內存盤要掛載的目錄,將初始化后的內存盤掛載到所建立的目
錄中;

在內存盤所掛載的目錄中創建數據庫,通過所述內存盤存儲數據庫的數
據文件。

進一步地,所述方法還包括:

在內存盤所掛載的目錄中創建數據庫后,還將所述數據庫的日志文件指
定到內存盤所掛載的目錄存放。

進一步地,所述初始化內存盤包括:初始化多個內存盤;

所述在內存盤所掛載的目錄中創建數據庫包括:根據CPU的數目,創建
多分區的數據庫,其中每個分區的數據庫均單獨創建在一內存盤所掛載的目
錄中。

進一步地,所述將所述數據庫的日志文件指定到內存盤所掛載的目錄存
放,包括:

計算日志文件的大小,根據日志文件的大小,從初始化后的多個內存盤
中選擇一滿足日志文件的大小需要且未創建數據庫的內存盤,將日志文件指
定到選擇的內存盤所掛載的目錄存放。

進一步地,在內存盤所掛載的目錄中創建數據庫后,還對數據庫進行以
下任意一項或多項的參數配置包括:

(1)關閉數據庫的自動調整內存的功能;

(2)將數據庫的緩沖池的大小配置為至少容納下所有未完成的事務和未完
成的查詢所需占用的數據頁;

(3)根據對數據庫的讀操作的需要配置數據庫的索引的數量。

進一步地,所述方法還包括:

在初始化內存盤后,還根據系統資源情況修改內存盤的大小;并且,

在將初始化后的內存盤掛載到所建立的目錄中后,還修改所述目錄及內
存盤的訪問權限,并為內存盤配置用戶組。

進一步地,一種提高數據庫性能的裝置,包括:初始化單元、掛載單元
和數據庫創建單元,其中:

所述初始化單元,用于初始化內存盤;

所述掛載單元,用于建立所述內存盤要掛載的目錄,將所述初始化單元
初始化后的內存盤掛載到所建立的目錄中;

所述數據庫創建單元,用于在內存盤所掛載的目錄中創建數據庫,通過
所述內存盤存儲數據庫的數據文件。

進一步地,所述數據庫創建單元,還用于在內存盤所掛載的目錄中創建
數據庫后,將所述數據庫的日志文件指定到內存盤所掛載的目錄存放。

進一步地,所述初始化單元初始化內存盤包括:初始化多個內存盤;

所述數據庫創建單元在內存盤所掛載的目錄中創建數據庫包括:根據
CPU的數目,創建多分區的數據庫,其中每個分區的數據庫均單獨創建在一
內存盤所掛載的目錄中。

進一步地,所述數據庫創建單元將所述數據庫的日志文件指定到內存盤
所掛載的目錄存放,包括:計算日志文件的大小,根據日志文件的大小,從
初始化后的多個內存盤中選擇一滿足日志文件的大小需要且未創建數據庫的
內存盤,將日志文件指定到選擇的內存盤所掛載的目錄存放。

與現有技術相比,本發明包括初始化內存盤,建立內存盤要掛載的目錄,
將初始化后的內存盤掛載到所建立的目錄中,在內存盤所掛載的目錄中創建
數據庫,通過內存盤存儲數據庫的數據文件,本發明中所有數據庫操作將不
會引起磁盤I/O,從而提高了數據庫的響應時間和并發度,改善了數據庫的性
能。

進一步地,本發明中在內存盤所掛載的目錄中創建數據庫后,還將數據
庫的日志文件指定到內存盤所掛載的目錄存放,不但可以提高數據庫的訪問
速度、增加磁盤壽命,還可以為高可用性配置提供便利。

進一步地,本發明中初始化內存盤包括:初始化多個內存盤;在內存盤
所掛載的目錄中創建數據庫包括:根據CPU的數目,創建多分區的數據庫,
其中每個分區的數據庫均單獨創建在一內存盤所掛載的目錄中;以及將數據
庫的活動日志文件指定到內存盤所掛載的目錄存放,包括:計算日志文件的
大小,根據日志文件的大小,從初始化后的多個內存盤中選擇一滿足日志文
件的大小需要且未創建數據庫的內存盤,將日志文件指定到選擇的內存盤所
掛載的目錄存放;能夠進一步的提高數據庫的效率。

進一步地,本發明中在內存盤所掛載的目錄中創建數據庫后,還對數據
庫進行以下任意一項或多項的參數配置包括:(1)關閉數據庫的自動調整內存
的功能;(2)將數據庫的緩沖池的大小配置為至少容納下所有未完成的事務和
未完成的查詢所需占用的數據頁;(3)根據對數據庫的讀操作的需要配置數據
庫的索引的數量;能夠顯著提高數據庫性能,同時避免過度使用內存。

本發明的其它特征和優點將在隨后的說明書中闡述,并且,部分地從說
明書中變得顯而易見,或者通過實施本發明而了解。本發明的目的和其他優
點可通過在說明書、權利要求書以及附圖中所特別指出的結構來實現和獲得。

附圖說明

附圖用來提供對本發明技術方案的進一步理解,并且構成說明書的一部
分,與本申請的實施例一起用于解釋本發明的技術方案,并不構成對本發明
技術方案的限制。

圖1為本發明的提高數據庫性能的方法的流程圖;

圖2為本發明的提高數據庫性能的裝置的架構圖。

具體實施方式

為使本發明的目的、技術方案和優點更加清楚明白,下文中將結合附圖
對本發明的實施例進行詳細說明。需要說明的是,在不沖突的情況下,本申
請中的實施例及實施例中的特征可以相互任意組合。

在附圖的流程圖示出的步驟可以在諸如一組計算機可執行指令的計算機
系統中執行。并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,
可以以不同于此處的順序執行所示出或描述的步驟。

如圖1所示,本發明的提高數據庫性能的方法,包括:

步驟101:初始化內存盤;

本發明中將一部分內存虛擬成一個驅動器設備,稱為內存盤。數據庫可
以像訪問普通的硬盤分區一樣訪問內存盤。內存盤可以明顯的提高數據訪問
速度,特別對需要頻繁讀寫多個不連續扇區的操作,速度提高更明顯。

本發明中的內存盤可以基于如Linux等操作系統。例如,本發明中使用
RHEL4.5系統,其默認已經加載了內存盤的驅動程序。Linux內存盤的硬件接
口文件保存在/dev目錄下,包括ram0到ram15共16個文件。每一個文件都
可以初始成一個內存盤。未初始化之前,不占用內存空間。

可以使用下面的命令初始化內存盤,該命令需要使用root用戶運行:

/sbin/mkfs-text3-b1024/dev/ram0。

在上面的命令中,-b1024用于指定使用1024字節作為單個block塊的大
小,在不同版本的Linux上,可以嘗試修改該值,以保證初始化以后可以掛載
(mount)到文件系統上。-text3用于指定使用ext3格式初始化內存盤,用戶可
以根據自己的喜好選用不同的文件系統格式。

在初始化內存盤后,還可以根據系統資源情況修改內存盤的大小。

默認的內存盤的大小是4M(不同系統上,這個值可能會有所不同)。例
如,可以通過修改/etc/grub.conf文件來修改內存盤的大小。使用root用戶修
改grub.conf文件中kernel開頭的行,在最后添加ramdisk_size=<內存盤的大
小>,如采用:kernel/boot/vmlinuz-2.6.9-55.ELsmproroot=LABEL=/rhgb
quietramdisk_size=4194304。

內存盤的大小以K(1024字節)為單位,轉化為M時需要除以1024。
另外,文件系統本身還要占用2%左右的空間。修改該文件以后,重啟機器,
并重新初始化內存盤。此時,內存盤已經修改為新的大小。

為避免內存盤占用太多內存,造成系統運行困難,內存盤的大小不應超
過物理內存的3/4。在內存比較小的機器上,要保證操作系統、數據庫和其他
應用程序至少有1G的可用物理內存。

步驟102:建立內存盤要掛載的目錄,將初始化后的內存盤掛載到所建立
的目錄中;

本發明中建立內存盤要掛載的目錄(可能需要使用root用戶執行),可
以采用mkdir命令,例如mkdir/db2data,建立用于掛載內存盤的目錄db2data。

本發明中可以使用mount命令(該命令需要使用root用戶運行)將初始
化之后的內存盤掛載到文件系統中,例如,命令可以是:

mount–text3/dev/ram0/db2data。

在上面的命令中,-text3用于指定內存盤的格式是ext3,用戶可以選擇不
同的格式,該格式需要與初始化內存盤時使用的格式相同。/dev/ram0用于指
定經過初始化的內存盤設備;/db2data用于指定掛載到的文件系統目錄。

在將初始化后的內存盤掛載到所建立的目錄中后,還修改目錄及內存盤
的訪問權限,并為內存盤配置用戶組。

修改目錄的訪問權限(需要使用root用戶執行),可以采用:

chmod–R777/db2data。

修改內存盤設備的訪問權限(需要使用root用戶執行),可以采用:

chmod660/dev/ram0。

使用內存盤的用戶,應在disk用戶組中。可以使用以下命令,將特定用
戶添加到disk組中(需要使用root用戶執行):

/usr/sbin/usermod–a–Gdisk<login>。

本發明中在將內存盤掛載到文件系統以后,還可以使用df命令查看內存
盤掛載的狀態:

如df–k/db2data。

在查看結果中,Filesystem項指出掛載的設備是/dev/ram0;1K-blocks項
指出該目錄下有多少個1K字節大小的塊;Used指出已經使用的塊數;
Available指出用戶可用的塊數;Use%指出使用百分比;Mountedon指出掛
載到目錄的位置為/db2data。

步驟103:在內存盤所掛載的目錄中創建數據庫,通過內存盤存儲數據庫
的數據文件。

本發明中以使用DB2數據庫為例,DB2數據庫的數據存放在表空間中,
日志存放在日志文件中。表空間的所有容器和所有的日志文件,都存放在磁
盤(或磁盤構成的存儲設備)上。這樣,訪問數據時需要大量的磁盤I/O。磁
盤I/O往往成為高負載數據庫的瓶頸,導致數據庫性能偏低。

本發明中將操作系統中的一部分內存虛擬成內存盤,進行初始化,并掛
載到文件系統中。在數據庫創建時,將數據庫創建在掛載內存盤的目錄,此
時數據庫的數據文件都存儲在內存盤上,所有數據庫操作將不會引起磁盤
I/O,以提高數據庫的性能。

仍以DB2數據庫為例,創建DB2數據庫時,可以指定數據庫創建的目錄。
此時,數據庫的容器都在指定的目錄下。如果該目錄是內存盤的掛載點或掛
載點的子目錄,那么數據庫實際上就是建立在內存盤上。所有的數據庫操作
都不會引起磁盤I/O。

本發明中可以使用如下命令將數據庫建立在特定目錄上(該命令需要具
有DBA權限的用戶執行):

db2“createdbtestdbon/db2data”。

運行上面的命令,會在/db2data目錄上,建立一個名為testdb的數據庫。
關于createdb更詳細的用法和參數,可以參考DB2InformationCenter。

在按照上文的描述建立了內存盤,并掛載到/db2data目錄上之后,那么新
建立的testdb數據庫就建立在內存盤上了。只要不重啟機器、不umount內存
盤,那么就可以像操作在磁盤上數據庫的一樣,對testdb數據庫進行各種操作。

進一步地,本發明中在內存盤所掛載的目錄中創建數據庫后,還將數據
庫的日志文件指定到內存盤所掛載的目錄存放。不但可以提高數據庫的訪問
速度、增加磁盤壽命,還可以為高可用性配置提供便利

進一步地,本發明中初始化內存盤包括:初始化多個內存盤;在內存盤
所掛載的目錄中創建數據庫包括:根據CPU的數目,創建多分區的數據庫,
其中每個分區的數據庫均單獨創建在一內存盤所掛載的目錄中。

使用內存盤以后,數據庫同時并發的事務可以得到很大提高。主要的瓶
頸不再是磁盤I/O,因此可以根據CPU的數目,建立多分區的數據庫,將有
效提高讀寫速度。同時,還可以修改并行相關的參數,提高并行度,也有助
于提高讀寫速度。如果建立多分區的數據庫,那么建立多個內存盤,保證每
個分區都訪問一個內存盤。

進一步地,本發明中將數據庫的日志文件指定到內存盤所掛載的目錄存
放,包括:計算日志文件的大小,根據日志文件的大小,從初始化后的多個
內存盤中選擇一滿足日志文件的大小需要且未創建數據庫的內存盤,將日志
文件指定到選擇的內存盤所掛載的目錄存放。為日志指定單獨的內存盤,這
樣可以有效的提高數據庫的效率。

在一些高性能的服務器上,系統內存可會達到幾百GB甚至TB。此時,
可以考慮將讀寫頻繁的日志文件也存放在內存盤上,不但可以提高數據庫的
訪問速度、增加磁盤壽命,還可以為高可用性配置提供便利。

為了將日志文件存放在內存盤上,首先需要計算日志文件的大小。運行
時,當所有的日志文件被寫滿,尚未完成的事務就會失敗,并被rollback。因
此,應保證日志的大小滿足日常操作的要求。這需要考慮在通常情況下需要
的日志大小,以及在兩種極端情況需要的日志大小。這兩種極端情況是:

(1)在應用程序最繁忙的時候,這時并發的應用最多,但是每個應用占
用的日志大小相對較小。此時,應將平均每個事務占用的日志數并乘以并發
的應用的個數得到日志的大小。

(2)在執行批量操作時,此時往往是業務不太繁忙的時候,但是執行批
量操作的應用,往往會在一個事務中執行較多的操作。因此,往往需要占用
相當大的日志文件。這種情況下,可以通過修改應用程序,強制應用在每執
行幾萬到幾十萬個操作就執行一次commit或rollback。這種控制一次提交數
量的方法,還可以同時提高應用程序的效率。

在DB2數據庫中,活動日志分為主要日志(primary)和次要日志
(second)。DB2數據庫的主要日志文件,會在數據庫第一次被連接時建立,
日志放在內存盤內可以縮短等待時間。數據庫運行時主要日志文件會被循環
使用。

當未結束的事務將主要日志文件占滿,數據庫就會啟用次要日志文件。
次要日志文件也會被循環使用。所有的活動日志文件(主要日志文件和次要
日志文件)一旦被分配就不會釋放,直到數據庫退出。因為活動日志大小不
夠時,可能引起事務回滾,因此在實際業務系統上,次要日志文件往往被設
置的足夠大。但在使用內存盤存放活動日志文件時,需要考慮在滿足業務需
求的前提下,盡量減小次要日志文件的大小。即使配置了溢出日志路徑
(overflowlogpath),也是如此。

對于DB2數據庫,可以根據主要日志文件和次要日志文件的大小,從多
個內存盤中選擇大小合適且其上未創建數據庫的內存盤,并通過修改
NEWLOGPATH參數,為日志文件指定存放目錄。修改NEWLOGPATH參數
后,需要重新啟動數據庫才能生效,修改NEWLOGPATH參數的指令為:

db2updatedbcfgusingNEWLOGPATH/db2data/log。

在將日志文件存放在內存盤后,日志緩沖區的作用會減小。因此,可以
通過將日志緩沖區設置為較小的值以節約內存,可以采用以下指令進行設置:

db2updatedbcfgusingLOGBUFSZ256。

進一步地,在內存盤所掛載的目錄中創建數據庫后,還對數據庫進行以
下任意一項或多項的參數配置包括:

(1)關閉數據庫的自動調整內存的功能;

(2)將數據庫的緩沖池的大小配置為至少容納下所有未完成的事務和未完
成的查詢所需占用的數據頁;

(3)根據對數據庫的讀操作的需要配置數據庫的索引的數量。

創建數據庫后,還需要對許多參數進行配置,以提高性能,同時避免過
度使用內存。

如果將自動調整內存的功能打開,那么在業務高峰時,會導致內存盤和
數據庫管理器爭搶內存。因此,可以關閉數據庫的自動調整內存的功能,并
可以對數據庫的參數進行手動的調節,例如,針對DB2數據庫可以采用以下
命令關閉自動調整內存的功能:

db2updatedbcfgusingSELF_TUNING_MEMOFF。

因為,內存盤的速度比磁盤的速度快很多,因此通過配置大Bufferpool
(緩沖池)來提高數據讀寫速度的方法的作用很小。但是,數據庫仍要將數
據讀入Bufferpool,才能對其進行操作。因此,Bufferpool至少要能容下所有
未完成的事務和未完成的查詢所要占用的數據頁。

使用內存盤創建的數據庫,因為所有的讀寫操作,實際上都僅在內存中
進行,所以建立多個索引對寫入速度的影響明顯減小。但是,索引對讀操作
的效率提升仍然有效。基于這個特性,可以根據對數據庫的讀操作的需要配
置數據庫的索引的數量,例如,考慮適當多建一些索引。

如圖2所示,本發明還提供了一種提高數據庫性能的裝置,包括:初始
化單元、掛載單元和數據庫創建單元,其中:

初始化單元,用于初始化內存盤;

本發明中將一部分內存虛擬成一個驅動器設備,稱為內存盤。數據庫可
以像訪問普通的硬盤分區一樣訪問內存盤。內存盤可以明顯的提高數據訪問
速度,特別對需要頻繁讀寫多個不連續扇區的操作,速度提高更明顯。

本發明中的內存盤可以基于如Linux等操作系統。例如,本發明中使用
RHEL4.5系統,其默認已經加載了內存盤的驅動程序。Linux內存盤的硬件接
口文件保存在/dev目錄下,包括ram0到ram15共16個文件。每一個文件都
可以初始成一個內存盤。未初始化之前,不占用內存空間。

可以使用下面的命令初始化內存盤,該命令需要使用root用戶運行:

/sbin/mkfs-text3-b1024/dev/ram0。

在上面的命令中,-b1024用于指定使用1024字節作為單個block塊的大
小,在不同版本的Linux上,可以嘗試修改該值,以保證初始化以后可以掛載
(mount)到文件系統上。-text3用于指定使用ext3格式初始化內存盤,用戶可
以根據自己的喜好選用不同的文件系統格式。

在初始化單元初始化內存盤后,還可以根據系統資源情況修改內存盤的
大小。

默認的內存盤的大小是4M(不同系統上,這個值可能會有所不同)。例
如,可以通過修改/etc/grub.conf文件來修改內存盤的大小。使用root用戶修
改grub.conf文件中kernel開頭的行,在最后添加ramdisk_size=<內存盤的大
小>,如采用:kernel/boot/vmlinuz-2.6.9-55.ELsmproroot=LABEL=/rhgb
quietramdisk_size=4194304。

內存盤的大小以K(1024字節)為單位,轉化為M時需要除以1024。
另外,文件系統本身還要占用2%左右的空間。修改該文件以后,重啟機器,
并重新初始化內存盤。此時,內存盤已經修改為新的大小。

為避免內存盤占用太多內存,造成系統運行困難,內存盤的大小不應超
過物理內存的3/4。在內存比較小的機器上,要保證操作系統、數據庫和其他
應用程序至少有1G的可用物理內存。

掛載單元,用于建立內存盤要掛載的目錄,將所述初始化單元初始化后
的內存盤掛載到所建立的目錄中;

本發明中建立內存盤要掛載的目錄(可能需要使用root用戶執行),可
以采用mkdir命令,例如mkdir/db2data,建立用于掛載內存盤的目錄db2data。

本發明中可以使用mount命令(該命令需要使用root用戶運行)將初始
化之后的內存盤掛載到文件系統中,例如,命令可以是:

mount–text3/dev/ram0/db2data。

在上面的命令中,-text3用于指定內存盤的格式是ext3,用戶可以選擇不
同的格式,該格式需要與初始化內存盤時使用的格式相同。/dev/ram0用于指
定經過初始化的內存盤設備;/db2data用于指定掛載到的文件系統目錄。

在將初始化后的內存盤掛載到所建立的目錄中后,還修改目錄及內存盤
的訪問權限,并為內存盤配置用戶組。

修改目錄的訪問權限(需要使用root用戶執行),可以采用:

chmod–R777/db2data。

修改內存盤設備的訪問權限(需要使用root用戶執行),可以采用:

chmod660/dev/ram0。

使用內存盤的用戶,應在disk用戶組中。可以使用以下命令,將特定用
戶添加到disk組中(需要使用root用戶執行):

/usr/sbin/usermod–a–Gdisk<login>。

本發明中在將內存盤掛載到文件系統以后,還可以使用df命令查看內存
盤掛載的狀態:

如df–k/db2data。

在查看結果中,Filesystem項指出掛載的設備是/dev/ram0;1K-blocks項
指出該目錄下有多少個1K字節大小的塊;Used指出已經使用的塊數;
Available指出用戶可用的塊數;Use%指出使用百分比;Mountedon指出掛
載到目錄的位置為/db2data。

數據庫創建單元,用于在內存盤所掛載的目錄中創建數據庫,通過內存
盤存儲數據庫的數據文件。

本發明中以使用DB2數據庫為例,DB2數據庫的數據存放在表空間中,
日志存放在日志文件中。表空間的所有容器和所有的日志文件,都存放在磁
盤(或磁盤構成的存儲設備)上。這樣,訪問數據時需要大量的磁盤I/O。磁
盤I/O往往成為高負載數據庫的瓶頸,導致數據庫性能偏低。

本發明中將操作系統中的一部分內存虛擬成內存盤,進行初始化,并掛
載到文件系統中。在數據庫創建時,將數據庫創建在掛載內存盤的目錄,此
時數據庫的數據文件都存儲在內存盤上,所有數據庫操作將不會引起磁盤
I/O,以提高數據庫的性能。

仍以DB2數據庫為例,創建DB2數據庫時,可以指定數據庫創建的目錄。
此時,數據庫的容器都在指定的目錄下。如果該目錄是內存盤的掛載點或掛
載點的子目錄,那么數據庫實際上就是建立在內存盤上。所有的數據庫操作
都不會引起磁盤I/O。

本發明中可以使用如下命令將數據庫建立在特定目錄上(該命令需要具
有DBA權限的用戶執行):

db2“createdbtestdbon/db2data”。

運行上面的命令,會在/db2data目錄上,建立一個名為testdb的數據庫。
關于createdb更詳細的用法和參數,可以參考DB2InformationCenter。

在按照上文的描述建立了內存盤,并掛載到/db2data目錄上之后,那么新
建立的testdb數據庫就建立在內存盤上了。只要不重啟機器、不umount內存
盤,那么就可以像操作在磁盤上數據庫的一樣,對testdb數據庫進行各種操作。

進一步地,本發明中數據庫創建單元在內存盤所掛載的目錄中創建數據
庫后,還將數據庫的日志文件指定到內存盤所掛載的目錄存放。不但可以提
高數據庫的訪問速度、增加磁盤壽命,還可以為高可用性配置提供便利

進一步地,本發明中初始化單元初始化內存盤包括:初始化多個內存盤;
數據庫創建單元在內存盤所掛載的目錄中創建數據庫包括:根據CPU的數
目,創建多分區的數據庫,其中每個分區的數據庫均單獨創建在一內存盤所
掛載的目錄中。

使用內存盤以后,數據庫同時并發的事務可以得到很大提高。主要的瓶
頸不再是磁盤I/O,因此可以根據CPU的數目,建立多分區的數據庫,將有
效提高讀寫速度。同時,還可以修改并行相關的參數,提高并行度,也有助
于提高讀寫速度。如果建立多分區的數據庫,那么建立多個內存盤,保證每
個分區都訪問一個內存盤。

進一步地,本發明中數據庫創建單元將數據庫的日志文件指定到內存盤
所掛載的目錄存放,包括:計算日志文件的大小,根據日志文件的大小,從
初始化后的多個內存盤中選擇一滿足日志文件的大小需要且未創建數據庫的
內存盤,將日志文件指定到選擇的內存盤所掛載的目錄存放。為日志指定單
獨的內存盤,這樣可以有效的提高數據庫的效率。

在一些高性能的服務器上,系統內存可會達到幾百GB甚至TB。此時,
可以考慮將讀寫頻繁的日志文件也存放在內存盤上,不但可以提高數據庫的
訪問速度、增加磁盤壽命,還可以為高可用性配置提供便利。

為了將日志文件存放在內存盤上,首先需要計算日志文件的大小。運行
時,當所有的日志文件被寫滿,尚未完成的事務就會失敗,并被rollback。因
此,應保證日志的大小滿足日常操作的要求。這需要考慮在通常情況下需要
的日志大小,以及在兩種極端情況需要的日志大小。這兩種極端情況是:

(1)在應用程序最繁忙的時候,這時并發的應用最多,但是每個應用占
用的日志大小相對較小。此時,應將平均每個事務占用的日志數并乘以并發
的應用的個數得到日志的大小。

(2)在執行批量操作時,此時往往是業務不太繁忙的時候,但是執行批
量操作的應用,往往會在一個事務中執行較多的操作。因此,往往需要占用
相當大的日志文件。這種情況下,可以通過修改應用程序,強制應用在每執
行幾萬到幾十萬個操作就執行一次commit或rollback。這種控制一次提交數
量的方法,還可以同時提高應用程序的效率。

在DB2數據庫中,活動日志分為主要日志(primary)和次要日志
(second)。DB2數據庫的主要日志文件,會在數據庫第一次被連接時建立,
日志放在內存盤內可以縮短等待時間。數據庫運行時主要日志文件會被循環
使用。

當未結束的事務將主要日志文件占滿,數據庫就會啟用次要日志文件。
次要日志文件也會被循環使用。所有的活動日志文件(主要日志文件和次要
日志文件)一旦被分配就不會釋放,直到數據庫退出。因為活動日志大小不
夠時,可能引起事務回滾,因此在實際業務系統上,次要日志文件往往被設
置的足夠大。但在使用內存盤存放活動日志文件時,需要考慮在滿足業務需
求的前提下,盡量減小次要日志文件的大小。即使配置了溢出日志路徑
(overflowlogpath),也是如此。

對于DB2數據庫,可以根據主要日志文件和次要日志文件的大小,從多
個內存盤中選擇大小合適且其上未創建數據庫的內存盤,并通過修改
NEWLOGPATH參數,為日志文件指定存放目錄。修改NEWLOGPATH參數
后,需要重新啟動數據庫才能生效,修改NEWLOGPATH參數的指令為:

db2updatedbcfgusingNEWLOGPATH/db2data/log。

在將日志文件存放在內存盤后,日志緩沖區的作用會減小。因此,可以
通過將日志緩沖區設置為較小的值以節約內存,可以采用以下指令進行設置:

db2updatedbcfgusingLOGBUFSZ256。

進一步地,該裝置還可以包括參數配置單元,在數據庫創建單元在內存
盤所掛載的目錄中創建數據庫后,還對數據庫進行以下任意一項或多項的參
數配置包括:

(1)關閉數據庫的自動調整內存的功能;

(2)將數據庫的緩沖池的大小配置為至少容納下所有未完成的事務和未完
成的查詢所需占用的數據頁;

(3)根據對數據庫的讀操作的需要配置數據庫的索引的數量。

創建數據庫后,還需要對許多參數進行配置,以提高性能,同時避免過
度使用內存。

如果將自動調整內存的功能打開,那么在業務高峰時,會導致內存盤和
數據庫管理器爭搶內存。因此,可以關閉數據庫的自動調整內存的功能,并
可以對數據庫的參數進行手動的調節,例如,針對DB2數據庫可以采用以下
命令關閉自動調整內存的功能:

db2updatedbcfgusingSELF_TUNING_MEMOFF。

因為,內存盤的速度比磁盤的速度快很多,因此通過配置大Bufferpool
(緩沖池)來提高數據讀寫速度的方法的作用很小。但是,數據庫仍要將數
據讀入Bufferpool,才能對其進行操作。因此,Bufferpool至少要能容下所有
未完成的事務和未完成的查詢所要占用的數據頁。

使用內存盤創建的數據庫,因為所有的讀寫操作,實際上都僅在內存中
進行,所以建立多個索引對寫入速度的影響明顯減小。但是,索引對讀操作
的效率提升仍然有效。基于這個特性,可以根據對數據庫的讀操作的需要配
置數據庫的索引的數量,例如,考慮適當多建一些索引。

雖然本發明所揭露的實施方式如上,但所述的內容僅為便于理解本發明
而采用的實施方式,并非用以限定本發明。任何本發明所屬領域內的技術人
員,在不脫離本發明所揭露的精神和范圍的前提下,可以在實施的形式及細
節上進行任何的修改與變化,但本發明的專利保護范圍,仍須以所附的權利
要求書所界定的范圍為準。

關 鍵 詞:
一種 提高 數據庫 性能 方法 裝置
  專利查詢網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:一種提高數據庫性能的方法及裝置.pdf
鏈接地址:http://www.wwszu.club/p-6401423.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服客服 - 聯系我們

[email protected] 2017-2018 zhuanlichaxun.net網站版權所有
經營許可證編號:粵ICP備17046363號-1 
 


收起
展開
鬼佬大哥大