一种SmartRack系统数据库的优化方法与流程

文档序号:11654446阅读:213来源:国知局

本发明属于smartrack数据库领域,具体涉及一种smartrack系统数据库的优化方法。



背景技术:

数据库是一个单位或是一个应用领域的通用数据处理系统,它存储的是属于企业和事业部门、团体和个人的有关数据的集合。数据库中的数据是为众多用户所共享其信息而建立的,已经摆脱了具体程序的限制和制约。不同的用户可以按各自的用法使用数据库中的数据;多个用户可以同时共享数据库中的数据资源,即不同的用户可以同时存取数据库中的同一个数据。数据共享性不仅满足了各用户对信息内容的要求,同时也满足了各用户之间信息通信的要求。

smartrack以标准机柜为设计单位,统一对其搭载的服务器节点进行供电、散热和管理,广泛应用于大数据云计算等领域,需要经常应对来自互联网端大量的数据索引,例如12306网站在高峰期面对数以亿计的访问,经常造成网络阻塞,网站崩溃等宕机现象时有发生。此为现有技术的不足之处。



技术实现要素:

本发明的目的在于,针对上述现有技术存在的缺陷,提供设计一种smartrack系统数据库的优化方法,以解决上述技术问题。

为实现上述目的,本发明给出以下技术方案:

一种smartrack系统数据库的优化方法,其特征在于,包括以下步骤:

步骤1):降低数据访问量;

步骤2):降低返回的数据量;

步骤3):减少交互次数;

步骤4):降低数据库服务器cpu运算量。

作为优选,所述的步骤1中包含以下步骤:

步骤1.1):创建并使用正确的索引;在数据库中查看数据库真实的执行计划;根据真实的执行计划确定索引知否正确使用;

步骤1.2):仅通过索引访问数据

只是访问表中的几个字段,并且字段内容较少,可以为这几个字段单独建立一个组合索引,这样就可以直接只通过访问索引就能得到数据,一般索引占用的磁盘空间比表小很多,所以这种方式可以大大减少磁盘io开销。

步骤1.3):优化数据库执行计划

数据库执行计划是关系型数据库最核心的技术之一,它表示数据库执行时的数据访问算法。由于业务需求越来越复杂,表数据量也越来越大,数据库也需要支持非常复杂的业务逻辑,但数据库的性能还需要提高,因此,优秀的关系型数据库除了需要支持复杂的数据库语法及更多函数外,还需要有优秀的算法库来提高数据库性能。

步骤2.1):数据分页处理,并具体包含以下步骤:

客户端(应用程序或浏览器)分页,将数据从应用服务器全部下载到本地应用程序或浏览器,在应用程序或浏览器内部通过本地代码进行分页处理,该方法编码简单,可以减少客户端与应用服务器网络交互次数;

应用服务器分页,将数据从数据库服务器全部下载到应用服务器,在应用服务器内部再进行数据筛选。优点是编码简单,只需要一次数据库交互,总数据与分页数据差不多时性能较好;

数据库分页,采用数据库分页需要两次数据库完成

步骤2.2):只返回需要的字段

通过去除不必要的返回字段可以提高性能,如果你的查询表中有大字段或内容较多的字段,如备注信息、文件内容等等,那在查询表时一定要注意这方面的问题,否则可能会带来严重的性能问题;如果表经常要查询并且请求大内容字段的概率很低,我们可以采用分表处理,将一个大表分拆成两个一对一的关系表,将不常用的大内容字段放在一张单独的表中。

步骤3.1):采用batchdml

数据库访问框架一般都提供了批量提交的接口,采用batch操作一般不会减少很多数据库服务器的物理io,但是会大大减少客户端与服务端的交互次数,从而减少了多次发起的网络延时开销,同时也会降低数据库的cpu开销;

步骤3.2):采用inlist查询

很多时候需要按一些id查询数据库记录,我们可以采用一个id一个请求发给数据库,通过这样处理可以大大减少数据库请求的数量,从而提高性能;评估在in里面一次放多少个值还需要考虑应用服务器本地内存的开销,有并发访问时要计算本地数据使用周期内的并发上限;

步骤3.3):设置fetchsize

当采用select从数据库查询数据时,数据默认是根据客户端fetch_size参数处理,每次只返回fetch_size条记录,当客户端游标遍历到尾部时再从服务端取数据,直到最后全部传送完成。所以如果我们要从服务端一次取大量数据时,可以加大fetch_size,这样可以减少结果数据传输的交互次数及服务器数据准备时间,提高性能。

步骤3.4):使用存储过程

大型数据库一般都支持存储过程,合理的利用存储过程也可以提高系统性能,采用存储过程可以将整个业务逻辑封装在存储过程里,然后在客户端直接调用存储过程处理,这样可以减少网络交互的成本。

步骤4.1):使用绑定变量

绑定变量是指数据库中对变化的值采用变量参数的形式提交,使用绑定变量为何会提高数据库解析性能,这个需要从数据库执行原理说明,当一条数据库发送给数据库服务器后,系统首先会将数据库字符串进行hash运算,得到hash值后再从服务器内存里的数据库缓存区中进行检索,如果有相同的数据库字符,并且确认是同一逻辑的数据库语句,则从共享池缓存中取出数据库对应的执行计划,根据执行计划读取数据并返回结果给客户端;

):合理使用排序

当记录集增加到上万条以上时,大记录集排序不仅增加了cpu开销,而且可能会由于内存不足发生硬盘排序的现象,当发生硬盘排序时性能会急剧下降。

):减少比较操作

数据库的业务逻辑经常会包含一些比较操作,对于这些比较操作数据库都体现得很好,like模糊查询对于数据库来说不是很擅长,特别是需要模糊检查的记录有上万条以上时,这种情况一般可以采用专用search或者采用全文索引方案来提高性能

步骤4.4):复杂运算由客户端处理

大量这类复杂函数运算,放在客户端处理,一般cpu每秒中也只能处理1万-10万次这样的函数运算,放在数据库内不利于高并发处理。

本发明的有益效果在于,通过本发明给出的技术方案,能够快速定位能性的瓶颈点,快速找到数据库主要的开销位置,从而快速找到数据库的性能瓶颈点并进行处理,以提高整个数据库的运行效率。此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。

由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。

具体实施方式

下面通过具体实施例对本发明进行详细阐述,以下实施例是对本发明的解释,而本发明并不局限于以下实施方式。

本发明给出以下实施例:

一种smartrack系统数据库的优化方法,其特征在于,包括以下步骤:

步骤1):降低数据访问量;

步骤2):降低返回的数据量;

步骤3):减少交互次数;

步骤4):降低数据库服务器cpu运算量。

作为优选,所述的步骤1中包含以下步骤:

步骤1.1):创建并使用正确的索引;在数据库中查看数据库真实的执行计划;根据真实的执行计划确定索引知否正确使用;

步骤1.2):仅通过索引访问数据

只是访问表中的几个字段,并且字段内容较少,可以为这几个字段单独建立一个组合索引,这样就可以直接只通过访问索引就能得到数据,一般索引占用的磁盘空间比表小很多,所以这种方式可以大大减少磁盘io开销。

步骤1.3):优化数据库执行计划

数据库执行计划是关系型数据库最核心的技术之一,它表示数据库执行时的数据访问算法。由于业务需求越来越复杂,表数据量也越来越大,数据库也需要支持非常复杂的业务逻辑,但数据库的性能还需要提高,因此,优秀的关系型数据库除了需要支持复杂的数据库语法及更多函数外,还需要有优秀的算法库来提高数据库性能。

本实施例中,所述的步骤2)包含以下步骤:

步骤2.1):数据分页处理,并具体包含以下步骤:

客户端(应用程序或浏览器)分页,将数据从应用服务器全部下载到本地应用程序或浏览器,在应用程序或浏览器内部通过本地代码进行分页处理,该方法编码简单,可以减少客户端与应用服务器网络交互次数;

应用服务器分页,将数据从数据库服务器全部下载到应用服务器,在应用服务器内部再进行数据筛选。优点是编码简单,只需要一次数据库交互,总数据与分页数据差不多时性能较好;

数据库分页,采用数据库分页需要两次数据库完成;

步骤2.2):只返回需要的字段

通过去除不必要的返回字段可以提高性能,如果你的查询表中有大字段或内容较多的字段,如备注信息、文件内容等等,那在查询表时一定要注意这方面的问题,否则可能会带来严重的性能问题;如果表经常要查询并且请求大内容字段的概率很低,我们可以采用分表处理,将一个大表分拆成两个一对一的关系表,将不常用的大内容字段放在一张单独的表中。

所述步骤3)包含以下具体步骤:

步骤3.1):采用batchdml

数据库访问框架一般都提供了批量提交的接口,采用batch操作一般不会减少很多数据库服务器的物理io,但是会大大减少客户端与服务端的交互次数,从而减少了多次发起的网络延时开销,同时也会降低数据库的cpu开销;

步骤3.2):采用inlist查询

很多时候需要按一些id查询数据库记录,我们可以采用一个id一个请求发给数据库,通过这样处理可以大大减少数据库请求的数量,从而提高性能;评估在in里面一次放多少个值还需要考虑应用服务器本地内存的开销,有并发访问时要计算本地数据使用周期内的并发上限;

步骤3.3):设置fetchsize

当采用select从数据库查询数据时,数据默认是根据客户端fetch_size参数处理,每次只返回fetch_size条记录,当客户端游标遍历到尾部时再从服务端取数据,直到最后全部传送完成。所以如果我们要从服务端一次取大量数据时,可以加大fetch_size,这样可以减少结果数据传输的交互次数及服务器数据准备时间,提高性能。

步骤3.4):使用存储过程

大型数据库一般都支持存储过程,合理的利用存储过程也可以提高系统性能,采用存储过程可以将整个业务逻辑封装在存储过程里,然后在客户端直接调用存储过程处理,这样可以减少网络交互的成本。

所述的步骤4)具体包含以下步骤:

步骤4.1):使用绑定变量

绑定变量是指数据库中对变化的值采用变量参数的形式提交,使用绑定变量为何会提高数据库解析性能,这个需要从数据库执行原理说明,当一条数据库发送给数据库服务器后,系统首先会将数据库字符串进行hash运算,得到hash值后再从服务器内存里的数据库缓存区中进行检索,如果有相同的数据库字符,并且确认是同一逻辑的数据库语句,则从共享池缓存中取出数据库对应的执行计划,根据执行计划读取数据并返回结果给客户端;

步骤4.2):合理使用排序

当记录集增加到上万条以上时,大记录集排序不仅增加了cpu开销,而且可能会由于内存不足发生硬盘排序的现象,当发生硬盘排序时性能会急剧下降。

步骤4.3):减少比较操作

数据库的业务逻辑经常会包含一些比较操作,对于这些比较操作数据库都体现得很好,like模糊查询对于数据库来说不是很擅长,特别是需要模糊检查的记录有上万条以上时,这种情况一般可以采用专用search或者采用全文索引方案来提高性能。

步骤4.4):复杂运算由客户端处理

大量这类复杂函数运算,放在客户端处理,一般cpu每秒中也只能处理1万-10万次这样的函数运算,放在数据库内不利于高并发处理。

以上公开的仅为本发明的优选实施方式,但本发明并非局限于此,任何本领域的技术人员能思之的没有创造性的变化,以及在不脱离本发明原理前提下所作的若干改进和润饰,都应落在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1