CN105045874B - 一种提高数据库性能的方法及装置 - Google Patents
一种提高数据库性能的方法及装置 Download PDFInfo
- Publication number
- CN105045874B CN105045874B CN201510424929.1A CN201510424929A CN105045874B CN 105045874 B CN105045874 B CN 105045874B CN 201510424929 A CN201510424929 A CN 201510424929A CN 105045874 B CN105045874 B CN 105045874B
- Authority
- CN
- China
- Prior art keywords
- database
- catalogue
- ram disk
- disk
- carry
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 21
- 239000000872 buffer Substances 0.000 claims description 11
- 230000006870 function Effects 0.000 claims description 11
- 238000005192 partition Methods 0.000 claims description 11
- 230000004048 modification Effects 0.000 claims description 5
- 238000012986 modification Methods 0.000 claims description 5
- 230000004044 response Effects 0.000 abstract description 8
- 230000000694 effects Effects 0.000 description 13
- 230000008859 change Effects 0.000 description 11
- 230000008520 organization Effects 0.000 description 1
- 230000000452 restraining effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/217—Database tuning
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种提高数据库性能的方法及装置,包括:初始化内存盘;建立所述内存盘要挂载的目录,将初始化后的内存盘挂载到所建立的目录中;在内存盘所挂载的目录中创建数据库,通过所述内存盘存储数据库的数据文件。本发明中所有数据库操作将不会引起磁盘I/O,从而提高了数据库的响应时间和并发度,改善了数据库的性能。
Description
技术领域
本发明涉及计算机系统领域和数据库领域,尤指一种提高数据库性能的方法及装置。
背景技术
OLTP全称为online transaction processing,即在线交易处理,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-t ext3-b 1024/dev/ram0。
在上面的命令中,-b 1024用于指定使用1024字节作为单个block块的大小,在不同版本的Linux上,可以尝试修改该值,以保证初始化以后可以挂载(mount)到文件系统上。-t ext3用于指定使用ext3格式初始化内存盘,用户可以根据自己的喜好选用不同的文件系统格式。
在初始化内存盘后,还可以根据系统资源情况修改内存盘的大小。
默认的内存盘的大小是4M(不同系统上,这个值可能会有所不同)。例如,可以通过修改/etc/grub.conf文件来修改内存盘的大小。使用root用户修改grub.conf文件中kernel开头的行,在最后添加ramdisk_size=<内存盘的大小>,如采用:kernel/boot/vmlinuz-2.6.9-55.ELsmp ro root=LABEL=/rhgb quiet ramdisk_size=4194304。
内存盘的大小以K(1024字节)为单位,转化为M时需要除以1024。另外,文件系统本身还要占用2%左右的空间。修改该文件以后,重启机器,并重新初始化内存盘。此时,内存盘已经修改为新的大小。
为避免内存盘占用太多内存,造成系统运行困难,内存盘的大小不应超过物理内存的3/4。在内存比较小的机器上,要保证操作系统、数据库和其他应用程序至少有1G的可用物理内存。
步骤102:建立内存盘要挂载的目录,将初始化后的内存盘挂载到所建立的目录中;
本发明中建立内存盘要挂载的目录(可能需要使用root用户执行),可以采用mkdir命令,例如mkdir/db2data,建立用于挂载内存盘的目录db2data。
本发明中可以使用mount命令(该命令需要使用root用户运行)将初始化之后的内存盘挂载到文件系统中,例如,命令可以是:
mount–t ext3/dev/ram0/db2data。
在上面的命令中,-t ext3用于指定内存盘的格式是ext3,用户可以选择不同的格式,该格式需要与初始化内存盘时使用的格式相同。/dev/ram0用于指定经过初始化的内存盘设备;/db2data用于指定挂载到的文件系统目录。
在将初始化后的内存盘挂载到所建立的目录中后,还修改目录及内存盘的访问权限,并为内存盘配置用户组。
修改目录的访问权限(需要使用root用户执行),可以采用:
chmod–R 777/db2data。
修改内存盘设备的访问权限(需要使用root用户执行),可以采用:
chmod 660/dev/ram0。
使用内存盘的用户,应在disk用户组中。可以使用以下命令,将特定用户添加到disk组中(需要使用root用户执行):
/usr/sbin/usermod–a–G disk<login>。
本发明中在将内存盘挂载到文件系统以后,还可以使用df命令查看内存盘挂载的状态:
如df–k/db2data。
在查看结果中,Filesystem项指出挂载的设备是/dev/ram0;1K-blocks项指出该目录下有多少个1K字节大小的块;Used指出已经使用的块数;Available指出用户可用的块数;Use%指出使用百分比;Mounted on指出挂载到目录的位置为/db2data。
步骤103:在内存盘所挂载的目录中创建数据库,通过内存盘存储数据库的数据文件。
本发明中以使用DB2数据库为例,DB2数据库的数据存放在表空间中,日志存放在日志文件中。表空间的所有容器和所有的日志文件,都存放在磁盘(或磁盘构成的存储设备)上。这样,访问数据时需要大量的磁盘I/O。磁盘I/O往往成为高负载数据库的瓶颈,导致数据库性能偏低。
本发明中将操作系统中的一部分内存虚拟成内存盘,进行初始化,并挂载到文件系统中。在数据库创建时,将数据库创建在挂载内存盘的目录,此时数据库的数据文件都存储在内存盘上,所有数据库操作将不会引起磁盘I/O,以提高数据库的性能。
仍以DB2数据库为例,创建DB2数据库时,可以指定数据库创建的目录。此时,数据库的容器都在指定的目录下。如果该目录是内存盘的挂载点或挂载点的子目录,那么数据库实际上就是建立在内存盘上。所有的数据库操作都不会引起磁盘I/O。
本发明中可以使用如下命令将数据库建立在特定目录上(该命令需要具有DBA权限的用户执行):
db2“create db testdb on/db2data”。
运行上面的命令,会在/db2data目录上,建立一个名为testdb的数据库。关于create db更详细的用法和参数,可以参考DB2 Information Center。
在按照上文的描述建立了内存盘,并挂载到/db2data目录上之后,那么新建立的testdb数据库就建立在内存盘上了。只要不重启机器、不umount内存盘,那么就可以像操作在磁盘上数据库的一样,对testdb数据库进行各种操作。
进一步地,本发明中在内存盘所挂载的目录中创建数据库后,还将数据库的日志文件指定到内存盘所挂载的目录存放。不但可以提高数据库的访问速度、增加磁盘寿命,还可以为高可用性配置提供便利
进一步地,本发明中初始化内存盘包括:初始化多个内存盘;在内存盘所挂载的目录中创建数据库包括:根据CPU的数目,创建多分区的数据库,其中每个分区的数据库均单独创建在一内存盘所挂载的目录中。
使用内存盘以后,数据库同时并发的事务可以得到很大提高。主要的瓶颈不再是磁盘I/O,因此可以根据CPU的数目,建立多分区的数据库,将有效提高读写速度。同时,还可以修改并行相关的参数,提高并行度,也有助于提高读写速度。如果建立多分区的数据库,那么建立多个内存盘,保证每个分区都访问一个内存盘。
进一步地,本发明中将数据库的日志文件指定到内存盘所挂载的目录存放,包括:计算日志文件的大小,根据日志文件的大小,从初始化后的多个内存盘中选择一满足日志文件的大小需要且未创建数据库的内存盘,将日志文件指定到选择的内存盘所挂载的目录存放。为日志指定单独的内存盘,这样可以有效的提高数据库的效率。
在一些高性能的服务器上,系统内存可会达到几百GB甚至TB。此时,可以考虑将读写频繁的日志文件也存放在内存盘上,不但可以提高数据库的访问速度、增加磁盘寿命,还可以为高可用性配置提供便利。
为了将日志文件存放在内存盘上,首先需要计算日志文件的大小。运行时,当所有的日志文件被写满,尚未完成的事务就会失败,并被rollback。因此,应保证日志的大小满足日常操作的要求。这需要考虑在通常情况下需要的日志大小,以及在两种极端情况需要的日志大小。这两种极端情况是:
(1)在应用程序最繁忙的时候,这时并发的应用最多,但是每个应用占用的日志大小相对较小。此时,应将平均每个事务占用的日志数并乘以并发的应用的个数得到日志的大小。
(2)在执行批量操作时,此时往往是业务不太繁忙的时候,但是执行批量操作的应用,往往会在一个事务中执行较多的操作。因此,往往需要占用相当大的日志文件。这种情况下,可以通过修改应用程序,强制应用在每执行几万到几十万个操作就执行一次commit或rollback。这种控制一次提交数量的方法,还可以同时提高应用程序的效率。
在DB2数据库中,活动日志分为主要日志(primary)和次要日志(second)。DB2数据库的主要日志文件,会在数据库第一次被连接时建立,日志放在内存盘内可以缩短等待时间。数据库运行时主要日志文件会被循环使用。
当未结束的事务将主要日志文件占满,数据库就会启用次要日志文件。次要日志文件也会被循环使用。所有的活动日志文件(主要日志文件和次要日志文件)一旦被分配就不会释放,直到数据库退出。因为活动日志大小不够时,可能引起事务回滚,因此在实际业务系统上,次要日志文件往往被设置的足够大。但在使用内存盘存放活动日志文件时,需要考虑在满足业务需求的前提下,尽量减小次要日志文件的大小。即使配置了溢出日志路径(overflowlogpath),也是如此。
对于DB2数据库,可以根据主要日志文件和次要日志文件的大小,从多个内存盘中选择大小合适且其上未创建数据库的内存盘,并通过修改NEWLOGPATH参数,为日志文件指定存放目录。修改NEWLOGPATH参数后,需要重新启动数据库才能生效,修改NEWLOGPATH参数的指令为:
db2 update db cfg using NEWLOGPATH/db2data/log。
在将日志文件存放在内存盘后,日志缓冲区的作用会减小。因此,可以通过将日志缓冲区设置为较小的值以节约内存,可以采用以下指令进行设置:
db2 update db cfg using LOGBUFSZ 256。
进一步地,在内存盘所挂载的目录中创建数据库后,还对数据库进行以下任意一项或多项的参数配置包括:
(1)关闭数据库的自动调整内存的功能;
(2)将数据库的缓冲池的大小配置为至少容纳下所有未完成的事务和未完成的查询所需占用的数据页;
(3)根据对数据库的读操作的需要配置数据库的索引的数量。
创建数据库后,还需要对许多参数进行配置,以提高性能,同时避免过度使用内存。
如果将自动调整内存的功能打开,那么在业务高峰时,会导致内存盘和数据库管理器争抢内存。因此,可以关闭数据库的自动调整内存的功能,并可以对数据库的参数进行手动的调节,例如,针对DB2数据库可以采用以下命令关闭自动调整内存的功能:
db2 update db cfg using SELF_TUNING_MEM OFF。
因为,内存盘的速度比磁盘的速度快很多,因此通过配置大Bufferpool(缓冲池)来提高数据读写速度的方法的作用很小。但是,数据库仍要将数据读入Bufferpool,才能对其进行操作。因此,Bufferpool至少要能容下所有未完成的事务和未完成的查询所要占用的数据页。
使用内存盘创建的数据库,因为所有的读写操作,实际上都仅在内存中进行,所以建立多个索引对写入速度的影响明显减小。但是,索引对读操作的效率提升仍然有效。基于这个特性,可以根据对数据库的读操作的需要配置数据库的索引的数量,例如,考虑适当多建一些索引。
如图2所示,本发明还提供了一种提高数据库性能的装置,包括:初始化单元、挂载单元和数据库创建单元,其中:
初始化单元,用于初始化内存盘;
本发明中将一部分内存虚拟成一个驱动器设备,称为内存盘。数据库可以像访问普通的硬盘分区一样访问内存盘。内存盘可以明显的提高数据访问速度,特别对需要频繁读写多个不连续扇区的操作,速度提高更明显。
本发明中的内存盘可以基于如Linux等操作系统。例如,本发明中使用RHEL4.5系统,其默认已经加载了内存盘的驱动程序。Linux内存盘的硬件接口文件保存在/dev目录下,包括ram0到ram15共16个文件。每一个文件都可以初始成一个内存盘。未初始化之前,不占用内存空间。
可以使用下面的命令初始化内存盘,该命令需要使用root用户运行:
/sbin/mkfs-t ext3-b 1024/dev/ram0。
在上面的命令中,-b 1024用于指定使用1024字节作为单个block块的大小,在不同版本的Linux上,可以尝试修改该值,以保证初始化以后可以挂载(mount)到文件系统上。-t ext3用于指定使用ext3格式初始化内存盘,用户可以根据自己的喜好选用不同的文件系统格式。
在初始化单元初始化内存盘后,还可以根据系统资源情况修改内存盘的大小。
默认的内存盘的大小是4M(不同系统上,这个值可能会有所不同)。例如,可以通过修改/etc/grub.conf文件来修改内存盘的大小。使用root用户修改grub.conf文件中kernel开头的行,在最后添加ramdisk_size=<内存盘的大小>,如采用:kernel/boot/vmlinuz-2.6.9-55.ELsmp ro root=LABEL=/rhgb quiet ramdisk_size=4194304。
内存盘的大小以K(1024字节)为单位,转化为M时需要除以1024。另外,文件系统本身还要占用2%左右的空间。修改该文件以后,重启机器,并重新初始化内存盘。此时,内存盘已经修改为新的大小。
为避免内存盘占用太多内存,造成系统运行困难,内存盘的大小不应超过物理内存的3/4。在内存比较小的机器上,要保证操作系统、数据库和其他应用程序至少有1G的可用物理内存。
挂载单元,用于建立内存盘要挂载的目录,将所述初始化单元初始化后的内存盘挂载到所建立的目录中;
本发明中建立内存盘要挂载的目录(可能需要使用root用户执行),可以采用mkdir命令,例如mkdir/db2data,建立用于挂载内存盘的目录db2data。
本发明中可以使用mount命令(该命令需要使用root用户运行)将初始化之后的内存盘挂载到文件系统中,例如,命令可以是:
mount–t ext3/dev/ram0/db2data。
在上面的命令中,-t ext3用于指定内存盘的格式是ext3,用户可以选择不同的格式,该格式需要与初始化内存盘时使用的格式相同。/dev/ram0用于指定经过初始化的内存盘设备;/db2data用于指定挂载到的文件系统目录。
在将初始化后的内存盘挂载到所建立的目录中后,还修改目录及内存盘的访问权限,并为内存盘配置用户组。
修改目录的访问权限(需要使用root用户执行),可以采用:
chmod–R 777/db2data。
修改内存盘设备的访问权限(需要使用root用户执行),可以采用:
chmod 660/dev/ram0。
使用内存盘的用户,应在disk用户组中。可以使用以下命令,将特定用户添加到disk组中(需要使用root用户执行):
/usr/sbin/usermod–a–G disk<login>。
本发明中在将内存盘挂载到文件系统以后,还可以使用df命令查看内存盘挂载的状态:
如df–k/db2data。
在查看结果中,Filesystem项指出挂载的设备是/dev/ram0;1K-blocks项指出该目录下有多少个1K字节大小的块;Used指出已经使用的块数;Available指出用户可用的块数;Use%指出使用百分比;Mounted on指出挂载到目录的位置为/db2data。
数据库创建单元,用于在内存盘所挂载的目录中创建数据库,通过内存盘存储数据库的数据文件。
本发明中以使用DB2数据库为例,DB2数据库的数据存放在表空间中,日志存放在日志文件中。表空间的所有容器和所有的日志文件,都存放在磁盘(或磁盘构成的存储设备)上。这样,访问数据时需要大量的磁盘I/O。磁盘I/O往往成为高负载数据库的瓶颈,导致数据库性能偏低。
本发明中将操作系统中的一部分内存虚拟成内存盘,进行初始化,并挂载到文件系统中。在数据库创建时,将数据库创建在挂载内存盘的目录,此时数据库的数据文件都存储在内存盘上,所有数据库操作将不会引起磁盘I/O,以提高数据库的性能。
仍以DB2数据库为例,创建DB2数据库时,可以指定数据库创建的目录。此时,数据库的容器都在指定的目录下。如果该目录是内存盘的挂载点或挂载点的子目录,那么数据库实际上就是建立在内存盘上。所有的数据库操作都不会引起磁盘I/O。
本发明中可以使用如下命令将数据库建立在特定目录上(该命令需要具有DBA权限的用户执行):
db2“create db testdb on/db2data”。
运行上面的命令,会在/db2data目录上,建立一个名为testdb的数据库。关于create db更详细的用法和参数,可以参考DB2 Information Center。
在按照上文的描述建立了内存盘,并挂载到/db2data目录上之后,那么新建立的testdb数据库就建立在内存盘上了。只要不重启机器、不umount内存盘,那么就可以像操作在磁盘上数据库的一样,对testdb数据库进行各种操作。
进一步地,本发明中数据库创建单元在内存盘所挂载的目录中创建数据库后,还将数据库的日志文件指定到内存盘所挂载的目录存放。不但可以提高数据库的访问速度、增加磁盘寿命,还可以为高可用性配置提供便利
进一步地,本发明中初始化单元初始化内存盘包括:初始化多个内存盘;数据库创建单元在内存盘所挂载的目录中创建数据库包括:根据CPU的数目,创建多分区的数据库,其中每个分区的数据库均单独创建在一内存盘所挂载的目录中。
使用内存盘以后,数据库同时并发的事务可以得到很大提高。主要的瓶颈不再是磁盘I/O,因此可以根据CPU的数目,建立多分区的数据库,将有效提高读写速度。同时,还可以修改并行相关的参数,提高并行度,也有助于提高读写速度。如果建立多分区的数据库,那么建立多个内存盘,保证每个分区都访问一个内存盘。
进一步地,本发明中数据库创建单元将数据库的日志文件指定到内存盘所挂载的目录存放,包括:计算日志文件的大小,根据日志文件的大小,从初始化后的多个内存盘中选择一满足日志文件的大小需要且未创建数据库的内存盘,将日志文件指定到选择的内存盘所挂载的目录存放。为日志指定单独的内存盘,这样可以有效的提高数据库的效率。
在一些高性能的服务器上,系统内存可会达到几百GB甚至TB。此时,可以考虑将读写频繁的日志文件也存放在内存盘上,不但可以提高数据库的访问速度、增加磁盘寿命,还可以为高可用性配置提供便利。
为了将日志文件存放在内存盘上,首先需要计算日志文件的大小。运行时,当所有的日志文件被写满,尚未完成的事务就会失败,并被rollback。因此,应保证日志的大小满足日常操作的要求。这需要考虑在通常情况下需要的日志大小,以及在两种极端情况需要的日志大小。这两种极端情况是:
(1)在应用程序最繁忙的时候,这时并发的应用最多,但是每个应用占用的日志大小相对较小。此时,应将平均每个事务占用的日志数并乘以并发的应用的个数得到日志的大小。
(2)在执行批量操作时,此时往往是业务不太繁忙的时候,但是执行批量操作的应用,往往会在一个事务中执行较多的操作。因此,往往需要占用相当大的日志文件。这种情况下,可以通过修改应用程序,强制应用在每执行几万到几十万个操作就执行一次commit或rollback。这种控制一次提交数量的方法,还可以同时提高应用程序的效率。
在DB2数据库中,活动日志分为主要日志(primary)和次要日志(second)。DB2数据库的主要日志文件,会在数据库第一次被连接时建立,日志放在内存盘内可以缩短等待时间。数据库运行时主要日志文件会被循环使用。
当未结束的事务将主要日志文件占满,数据库就会启用次要日志文件。次要日志文件也会被循环使用。所有的活动日志文件(主要日志文件和次要日志文件)一旦被分配就不会释放,直到数据库退出。因为活动日志大小不够时,可能引起事务回滚,因此在实际业务系统上,次要日志文件往往被设置的足够大。但在使用内存盘存放活动日志文件时,需要考虑在满足业务需求的前提下,尽量减小次要日志文件的大小。即使配置了溢出日志路径(overflowlogpath),也是如此。
对于DB2数据库,可以根据主要日志文件和次要日志文件的大小,从多个内存盘中选择大小合适且其上未创建数据库的内存盘,并通过修改NEWLOGPATH参数,为日志文件指定存放目录。修改NEWLOGPATH参数后,需要重新启动数据库才能生效,修改NEWLOGPATH参数的指令为:
db2 update db cfg using NEWLOGPATH/db2data/log。
在将日志文件存放在内存盘后,日志缓冲区的作用会减小。因此,可以通过将日志缓冲区设置为较小的值以节约内存,可以采用以下指令进行设置:
db2 update db cfg using LOGBUFSZ 256。
进一步地,该装置还可以包括参数配置单元,在数据库创建单元在内存盘所挂载的目录中创建数据库后,还对数据库进行以下任意一项或多项的参数配置包括:
(1)关闭数据库的自动调整内存的功能;
(2)将数据库的缓冲池的大小配置为至少容纳下所有未完成的事务和未完成的查询所需占用的数据页;
(3)根据对数据库的读操作的需要配置数据库的索引的数量。
创建数据库后,还需要对许多参数进行配置,以提高性能,同时避免过度使用内存。
如果将自动调整内存的功能打开,那么在业务高峰时,会导致内存盘和数据库管理器争抢内存。因此,可以关闭数据库的自动调整内存的功能,并可以对数据库的参数进行手动的调节,例如,针对DB2数据库可以采用以下命令关闭自动调整内存的功能:
db2 update db cfg using SELF_TUNING_MEM OFF。
因为,内存盘的速度比磁盘的速度快很多,因此通过配置大Bufferpool(缓冲池)来提高数据读写速度的方法的作用很小。但是,数据库仍要将数据读入Bufferpool,才能对其进行操作。因此,Bufferpool至少要能容下所有未完成的事务和未完成的查询所要占用的数据页。
使用内存盘创建的数据库,因为所有的读写操作,实际上都仅在内存中进行,所以建立多个索引对写入速度的影响明显减小。但是,索引对读操作的效率提升仍然有效。基于这个特性,可以根据对数据库的读操作的需要配置数据库的索引的数量,例如,考虑适当多建一些索引。
虽然本发明所揭露的实施方式如上,但所述的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
Claims (8)
1.一种提高数据库性能的方法,其特征在于,包括:
初始化内存盘;
建立所述内存盘要挂载的目录,将初始化后的内存盘挂载到所建立的目录中;
在内存盘所挂载的目录中创建数据库,通过所述内存盘存储数据库的数据文件;
其中,所述初始化内存盘包括:初始化多个内存盘;
所述在内存盘所挂载的目录中创建数据库包括:根据CPU的数目,创建多分区的数据库,其中每个分区的数据库均单独创建在一内存盘所挂载的目录中。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在内存盘所挂载的目录中创建数据库后,还将所述数据库的日志文件指定到内存盘所挂载的目录存放。
3.根据权利要求2所述的方法,其特征在于,所述将所述数据库的日志文件指定到内存盘所挂载的目录存放,包括:
计算日志文件的大小,根据日志文件的大小,从初始化后的多个内存盘中选择一满足日志文件的大小需要且未创建数据库的内存盘,将日志文件指定到选择的内存盘所挂载的目录存放。
4.根据权利要求1~3任意之一所述的方法,其特征在于,在内存盘所挂载的目录中创建数据库后,还对数据库进行以下任意一项或多项的参数配置包括:
(1)关闭数据库的自动调整内存的功能;
(2)将数据库的缓冲池的大小配置为至少容纳下所有未完成的事务和未完成的查询所需占用的数据页;
(3)根据对数据库的读操作的需要配置数据库的索引的数量。
5.根据权利要求1~3任意之一所述的方法,其特征在于,所述方法还包括:
在初始化内存盘后,还根据系统资源情况修改内存盘的大小;并且,
在将初始化后的内存盘挂载到所建立的目录中后,还修改所述目录及内存盘的访问权限,并为内存盘配置用户组。
6.一种提高数据库性能的装置,其特征在于,包括:初始化单元、挂载单元和数据库创建单元,其中:
所述初始化单元,用于初始化内存盘;
所述挂载单元,用于建立所述内存盘要挂载的目录,将所述初始化单元初始化后的内存盘挂载到所建立的目录中;
所述数据库创建单元,用于在内存盘所挂载的目录中创建数据库,通过所述内存盘存储数据库的数据文件;
其中,所述初始化单元初始化内存盘包括:初始化多个内存盘;
所述数据库创建单元在内存盘所挂载的目录中创建数据库包括:根据CPU的数目,创建多分区的数据库,其中每个分区的数据库均单独创建在一内存盘所挂载的目录中。
7.根据权利要求6所述的装置,其特征在于:
所述数据库创建单元,还用于在内存盘所挂载的目录中创建数据库后,将所述数据库的日志文件指定到内存盘所挂载的目录存放。
8.根据权利要求7所述的装置,其特征在于:
所述数据库创建单元将所述数据库的日志文件指定到内存盘所挂载的目录存放,包括:计算日志文件的大小,根据日志文件的大小,从初始化后的多个内存盘中选择一满足日志文件的大小需要且未创建数据库的内存盘,将日志文件指定到选择的内存盘所挂载的目录存放。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510424929.1A CN105045874B (zh) | 2015-07-17 | 2015-07-17 | 一种提高数据库性能的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510424929.1A CN105045874B (zh) | 2015-07-17 | 2015-07-17 | 一种提高数据库性能的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105045874A CN105045874A (zh) | 2015-11-11 |
CN105045874B true CN105045874B (zh) | 2018-06-12 |
Family
ID=54452421
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510424929.1A Active CN105045874B (zh) | 2015-07-17 | 2015-07-17 | 一种提高数据库性能的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105045874B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108073500A (zh) * | 2016-11-14 | 2018-05-25 | 深圳联友科技有限公司 | 一种日志记录方法以及系统 |
CN109343898B (zh) * | 2018-09-18 | 2021-10-01 | 郑州云海信息技术有限公司 | 一种基于ai云的容器卷目录自动识别方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101055591A (zh) * | 2007-05-25 | 2007-10-17 | 中兴通讯股份有限公司 | 一种全内存数据库的数据存取方法 |
CN101320392A (zh) * | 2008-07-17 | 2008-12-10 | 中兴通讯股份有限公司 | 内存数据库的大容量数据存取方法及装置 |
CN103226612A (zh) * | 2013-05-08 | 2013-07-31 | 华北计算技术研究所 | 一种基于内存数据库的内容管理系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7117203B2 (en) * | 2003-12-03 | 2006-10-03 | International Business Machines Corporation | Content addressable data storage and compression for semi-persistent computer memory for a database management system |
-
2015
- 2015-07-17 CN CN201510424929.1A patent/CN105045874B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101055591A (zh) * | 2007-05-25 | 2007-10-17 | 中兴通讯股份有限公司 | 一种全内存数据库的数据存取方法 |
CN101320392A (zh) * | 2008-07-17 | 2008-12-10 | 中兴通讯股份有限公司 | 内存数据库的大容量数据存取方法及装置 |
CN103226612A (zh) * | 2013-05-08 | 2013-07-31 | 华北计算技术研究所 | 一种基于内存数据库的内容管理系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105045874A (zh) | 2015-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11347408B2 (en) | Shared network-available storage that permits concurrent data access | |
US9449011B1 (en) | Managing data deduplication in storage systems | |
US8578096B2 (en) | Policy for storing data objects in a multi-tier storage system | |
EP2780796B1 (en) | Method of and system for merging, storing and retrieving incremental backup data | |
CN104636414B (zh) | 提供对更新后的文件的访问的方法和执行该方法的计算机 | |
US9015413B2 (en) | Management of data using inheritable attributes | |
JP5439236B2 (ja) | 計算機システムおよびアプリケーションプログラムの実行方法 | |
US9495396B2 (en) | Increased database performance via migration of data to faster storage | |
US8880488B1 (en) | Efficient extent-based B-tree insertion | |
US11546426B2 (en) | System and method for client policy assignment in a data storage system | |
US8356054B2 (en) | Management of resources in a host system | |
US10705764B2 (en) | Performing nearline storage of a file | |
EP2595048A2 (en) | Volume copy management method on thin provisioning pool of storage subsystem | |
JP4308152B2 (ja) | メモリを予約するための方法、システム、および製品 | |
CN105045874B (zh) | 一种提高数据库性能的方法及装置 | |
US11176089B2 (en) | Systems and methods for implementing dynamic file systems | |
US20170017507A1 (en) | Storage, computer, and control method therefor | |
Smolinski | Impact of storage space configuration on transaction processing performance for relational database in PostgreSQL | |
US11528236B2 (en) | User-based data tiering | |
US8977814B1 (en) | Information lifecycle management for binding content | |
US9646012B1 (en) | Caching temporary data in solid state storage devices | |
US11194760B1 (en) | Fast object snapshot via background processing | |
Hafeez | Role of File System in Operating System | |
CN116414296A (zh) | 数据分级存储方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |