数据库数据处理性能提升技术

来源:互联网 发布:淘宝保证金计划不符合 编辑:程序博客网 时间:2024/05/17 16:16

转自:http://blog.csdn.net/dingding_12345/article/details/50474398

一、数据处理性能存在的问题

1、企业的数据都集中存储在数据库中,从海量的数据中查找和定位数据是非常耗时的; 
2、数据集中存储后,所有用户都要来访问数据库,当很多用户同时访问数据库时,数据库服务器的负载就非常中。

二、数据处理过程


数据处理过程 

  • 所有处理要由CPU完成,但数据全部存储在磁盘上。CPU和磁盘很不匹配:CPU速度很快,磁盘速度很慢,相差天文数字(106)个数量级;
  • 磁盘有不可替代的特质:存储容量大;其上的数据不受系统故障影响;
  • 内存速度比磁盘高很多,起到缓冲作用,但其容量比磁盘小很多,其上的数据在发生死机或停电之类的故障时,数据丢失;
  • 数据库数据量通常比内存容量大很多;

三、数据库性能度量指标

1、事务吞吐量 
单位时间内能够完成事务的数量; 
2、响应时间 
完成单件事务需要耗费的时间。

两个指标必须相提并论,不能单独来提

四、提高数据库性能的策略

挖掘和利用

  • 数据特性
  • 硬件特性
  • 以及数据访问特性

五、提高数据库性能的方法

与数据库设计有关的方法: 
1、排序 
2、索引


索引 

大块的数据变成了很小的索引(仅2行),缩小了很多很多倍,可以一次 
性加载到内存里,迅速地找到想要的行,然后将行数据从磁盘读入内存。

没有索引,则要把大块数据全运输到内存,一个一个地比对,仅只极少的行有用。

创建索引时的注意事项

语法:

<code class="hljs sql has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-operator" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">CREATE</span> INDEXstudentIndexONstudent(dno, name);</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

正确地任用索引:

  • 不要对数据量少的表创建索引。因为读磁盘是以页(8k)为单位进行,如果表数据量只有几个页,索引就没意义。就像很少几页的文章,再给它搞个目录页也没有意义;
  • 对长字符串的字段,例如备注字段,不要创建索引,因为压缩比会小;
  • 对访问频繁的外键(作为查询条件,或者联接运算),应对其创建索引;
  • 对经常作为查询条件、联接运算、排序、分组、UNION,DISTINCT 的字段,对其创建索引;

哈希索引


哈希索引

当往表中添加一行记录时,对要哈希的字段计算哈希值,然后把该记录存储在磁盘空间中磁盘地址为该哈希值的地方。

查询数据行时,用户给出字段值,通过哈希计算,就可发现该记录的磁盘空间地址,直接读到对应的记录,不须要一行一行地去比对;对分布均匀特性的字段,哈希索引可行;例如“学号”字段;

3、连续的磁盘空间 


磁盘空间 

  • 磁盘以片段为单位来存储数据;
  • 一个文件在磁盘上被划分成多个片段,磁盘选取空闲片段来存储表记录; 如果这些片段散布在整个盘面上,磁头就要反复来回走动,效率低。

处理方式 


连续存储 

  • 对于表记录,如果连续地存储在一个磁道上,当读数据时,数据就可一个紧挨一个地读到,访问速度就会大大加快;
  • 你的计算机使用一段时间后,感觉明显变慢,也是这个道理;
  • 你可以做磁盘碎片整理,让每个文件的数据在磁盘上连续存储,这样就克服了磁头在盘面空间中到处来回移动,速度大大加快;

4、分类、聚簇 


聚簇 

把关系非常紧密,但位于不同表中的行记录,在磁盘上临近存储。当它们做联接运算时,就能迅速得到结果;

5、内存缓冲 


缓存 

我们知道,我们的钱放在银行最可靠,小偷偷不走,也不会丢失。但是,如果每次用钱时,都到银行去取,很费时间(至少要1小时),效率很低。为了提高效率,我们会一次到银行取2000放在口袋里,要用钱时,马上就可拿到,效率极高。

数据存在磁盘上可靠。访问磁盘也是这个道理,很费时间。可事先把数据缓存在内存中,这样数据访问效率和性能就会极大地提高;

6、日志和磁盘分开存储 


磁盘分开存储 

  • 当日志和数据库配置在一个物理磁盘上时,磁头一会要去数据库区读写要处理的数据,马上又要跳到日志区写日志,接着又要折回数据库区读写要处理的数据。磁头来回长距离倒腾,疲于奔命, 
    效率极低,性能极差。
  • 当配置单独的日志磁盘时,正常运行时,日志具有只写不读的特点,而且是递增,磁头可一个挨一个地写,不用来回移动,性能得到极大提高。

底下的两种是完成封装在DBMS中,对数据库设计者和DBA透明

7、查询优化

查询优化

查询优化并不明白,待探讨

8、并发执行 


并发执行
0 0
原创粉丝点击