集中式数据库性能优化

Posted 左直拳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集中式数据库性能优化相关的知识,希望对你有一定的参考价值。

升级硬件优化数据库设计优化索引优化查询

数据库性能调优是一个系统工程,不是一件容易的事情。对于集中式数据库的性能优化(有别于分布式数据库),大约可以从以下几个方面入手:

一、升级硬件

购买性能更高的服务器,或者升级机器硬件,包括CPU、内存、磁盘,以及加大带宽,提高网络传输速率。

加内存可以将更多的数据保存在缓冲区,以减少硬盘IO操作,从而提升数据库的整体性能。

磁盘子系统的性能提升体现在2个方面:
1)采用速度更快的磁盘系统,比如固态硬盘代替机械硬盘;或者采用SCS接口硬盘
2)合理分配磁盘IO到多个设备,提高并行操作能力,比如磁盘阵列

以上就是所谓垂直扩展,集中式数据库的性能提升方式。如果是分布式数据库,则可以水平扩展,以增加服务器的数量来提升服务能力。

二、优化数据库设计

在数据库设计阶段,就可以着手考虑性能优化问题。数据库的设计优化,可以包括逻辑设计优化和物理设计优化。

1、逻辑设计优化
主要是适度反规范化。

数据库规范化程度提升,使得数据库冗余信息减少,但也引入了新的问题。由于规范化使得关系模式不断被拆解,在使用数据时需要频繁进行连接操作,而连接操作是最耗时的,是数据库性能的制约因素。因此,适度反规范化,合理增加冗余属性,可以改善系统性能。常用的措施如下:

1)增加派生列(计算列),将常用的计算属性(例如总和、最大值等)存储到数据库中

2)重新定义实体(即重新设计表),增加冗余列,以减少连接等操作

3)水平或垂直分割表,提升并行访问度

2、物理设计优化
1)属性的数据类型应该反映数据所需的最小存储空间,特别是对于建立索引的属性。比如,能够用smallint类型的,就不要用integer。这样索引可以更快被读取,而且一条记录的长度越小,每页返回的记录数量就越多,减少了IO操作,性能得以提升。

2)将一个大表分割,分别存放在不同的物理磁盘上,并发读取,减轻IO压力,提升读取速度。

3)数据库中文本或图像属性的数据存放在单独的物理设备上,原理同上。

三、优化索引策略

1、选用经常查询、且很少更新的属性建立索引。

2、使用最多索引重点进行优化

3、数据量非常小的表不必建立索引(主键除外),全表扫描更有效

4、一个表不要建立太多索引。索引过多会影响update、insert、delete性能。

四、优化查询

查询优化(SQL优化)也称为应用程序优化,是数据库优化最重要的一环。SQL优化的策略很多,如:
1、建立物化视图或尽可能减少多表查询

2、只检索需要的属性

3、用IN条件子句等价替换OR子句

4、事务晚开启,早关闭,经常commit,及早释放锁

5、非相干子查询代替相干子查询
非相干子查询在一条SQL语句中,是独立的子查询,不依赖于外部的查询,相干子查询相反。比如

1)非相干子查询

SElECT *
  FROM Readers
  WHERE 读者编号 IN
  (
    SELECT 读者编号
    FROM [Borrow History]
  )

2)相干子查询

SELECT FROM Books As a
  WHERE 价格 >
  (
    SELECT AVG(价格)
    FROM Books AS b
    WHERE a.类编号=b.类编号
  )

3)总结
非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。

相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。

故非相关子查询比相关子查询效率高。

以上是关于集中式数据库性能优化的主要内容,如果未能解决你的问题,请参考以下文章

使用用户定义的函数在 BigQuery 数据集中插入海量数据时如何优化性能

mysql 索引使用与优化

针对Android的性能优化集中哪些方面

性能测试之常用工具介绍

MongoDb优化指南

星环科技分布式搜索引擎 Transwarp Scope 查询优化技术解读