数据库数据处理性能提升技术
2016-01-27 21:11
281 查看
转自:http://blog.csdn.net/dingding_12345/article/details/50474398
一、数据处理性能存在的问题
1、企业的数据都集中存储在数据库中,从海量的数据中查找和定位数据是非常耗时的;
2、数据集中存储后,所有用户都要来访问数据库,当很多用户同时访问数据库时,数据库服务器的负载就非常中。
二、数据处理过程
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/64ea73e0a0c25a36e8fce729528117b8)
所有处理要由CPU完成,但数据全部存储在磁盘上。CPU和磁盘很不匹配:CPU速度很快,磁盘速度很慢,相差天文数字(106)个数量级;
磁盘有不可替代的特质:存储容量大;其上的数据不受系统故障影响;
内存速度比磁盘高很多,起到缓冲作用,但其容量比磁盘小很多,其上的数据在发生死机或停电之类的故障时,数据丢失;
数据库数据量通常比内存容量大很多;
三、数据库性能度量指标
1、事务吞吐量
单位时间内能够完成事务的数量;
2、响应时间
完成单件事务需要耗费的时间。
两个指标必须相提并论,不能单独来提
四、提高数据库性能的策略
挖掘和利用
数据特性
硬件特性
以及数据访问特性
五、提高数据库性能的方法
与数据库设计有关的方法:
1、排序
2、索引
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/d43e5ad7d0ded438a75e12a583140971)
大块的数据变成了很小的索引(仅2行),缩小了很多很多倍,可以一次
性加载到内存里,迅速地找到想要的行,然后将行数据从磁盘读入内存。
没有索引,则要把大块数据全运输到内存,一个一个地比对,仅只极少的行有用。
创建索引时的注意事项
语法:
正确地任用索引:
不要对数据量少的表创建索引。因为读磁盘是以页(8k)为单位进行,如果表数据量只有几个页,索引就没意义。就像很少几页的文章,再给它搞个目录页也没有意义;
对长字符串的字段,例如备注字段,不要创建索引,因为压缩比会小;
对访问频繁的外键(作为查询条件,或者联接运算),应对其创建索引;
对经常作为查询条件、联接运算、排序、分组、UNION,DISTINCT 的字段,对其创建索引;
哈希索引
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/9fd710366726fd7a4c80e86236db96d5)
当往表中添加一行记录时,对要哈希的字段计算哈希值,然后把该记录存储在磁盘空间中磁盘地址为该哈希值的地方。
查询数据行时,用户给出字段值,通过哈希计算,就可发现该记录的磁盘空间地址,直接读到对应的记录,不须要一行一行地去比对;对分布均匀特性的字段,哈希索引可行;例如“学号”字段;
3、连续的磁盘空间
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/69aa5c26488e7c85401303c03b191e8e)
磁盘以片段为单位来存储数据;
一个文件在磁盘上被划分成多个片段,磁盘选取空闲片段来存储表记录; 如果这些片段散布在整个盘面上,磁头就要反复来回走动,效率低。
处理方式
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/c3ba0f0ff38d9699f67cf6287657b164)
对于表记录,如果连续地存储在一个磁道上,当读数据时,数据就可一个紧挨一个地读到,访问速度就会大大加快;
你的计算机使用一段时间后,感觉明显变慢,也是这个道理;
你可以做磁盘碎片整理,让每个文件的数据在磁盘上连续存储,这样就克服了磁头在盘面空间中到处来回移动,速度大大加快;
4、分类、聚簇
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/11f85a063544a48073fb3563df7a749d)
把关系非常紧密,但位于不同表中的行记录,在磁盘上临近存储。当它们做联接运算时,就能迅速得到结果;
5、内存缓冲
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/deb2ff89c3d4c2b0e46eb6bed9baf374)
我们知道,我们的钱放在银行最可靠,小偷偷不走,也不会丢失。但是,如果每次用钱时,都到银行去取,很费时间(至少要1小时),效率很低。为了提高效率,我们会一次到银行取2000放在口袋里,要用钱时,马上就可拿到,效率极高。
数据存在磁盘上可靠。访问磁盘也是这个道理,很费时间。可事先把数据缓存在内存中,这样数据访问效率和性能就会极大地提高;
6、日志和磁盘分开存储
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/b2656f8ecc89e23bfde7d6cd72862c90)
当日志和数据库配置在一个物理磁盘上时,磁头一会要去数据库区读写要处理的数据,马上又要跳到日志区写日志,接着又要折回数据库区读写要处理的数据。磁头来回长距离倒腾,疲于奔命,
效率极低,性能极差。
当配置单独的日志磁盘时,正常运行时,日志具有只写不读的特点,而且是递增,磁头可一个挨一个地写,不用来回移动,性能得到极大提高。
底下的两种是完成封装在DBMS中,对数据库设计者和DBA透明
7、查询优化
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/7b92d47e27091b955083c1272ff30d5b)
查询优化并不明白,待探讨
8、并发执行
一、数据处理性能存在的问题
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、并发执行
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- Tomcat端口被占用解决方法(不用重启)
- 创建一个空的IBM DB2 ECO数据库的方法
- 选定虚拟主机 性能凸显优势
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- 修改一行代码提升 Postgres 性能 100 倍
- CentOS下DB2数据库安装过程详解
- “传奇”图象数据存储方式
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle数据库执行脚本常用命令小结