大数据时代,最难的就是怎么处理海量数据的问题,从最开始的数据库选型到数据库优化,对于初涉大数据领域的小伙伴来说简直是要了亲命,今天我们就来看看各大数据库各有什么优缺点及数据库DB2的优化(SQL/Oracle在前面的文章中都有讲过吧,后续还会继续补充)。
489034603
先来说说它们的优缺点
DB2是一种海量数据库系统,经历了多年的业界的考验,从大型机到开放平台,从IBM自己的操作系统和硬件系统,再到其他主流的厂商的硬件和操作系统,运行文件,性能卓越,所谓老而弥坚,舍我其谁,特别是大型机系统上,更是数据库的不二选择,在海量事物处理、海量存储、功能设计、架构都非常出色,难得是总体非常均衡,几乎没有缺点。
这个可能是多年其长盛不衰的原因。
后来因为在策略上的变化,在windows平台上,ibm基本上采取了放弃的策略,让出了这部分市场,这个可能和气放弃了PC这块业务有关。
后来IBM又收购了informix,准备再补充道db2的市场中,更加增加他的数据库市场的话语权,无论如何,在老胡眼中,虽然价格昂贵,但db2是最好的综合性能的数据库了。
Oracle数据库也是一种非常优秀的数据库,基本上横扫了开放平台,是主流的数据库系统,从各种版本的unix到window 平台,都有他矫健的身影,而且从中端应用,到低端应用,都有非常好的,oraccle数据库的更新速度可能是所有数据库中更新速度最快的了,使更多的新技术新手段投入到用户应用中,而且oracle本身不仅仅是一个数据库,从8以后基本上都是一个完整套件,是一个综合的解决方案,不仅仅是数据库,到数据仓库、集市,再到具体应用开发,都提供了非常完善的手段和技术,而且覆盖平台众多,除了大型机这种封闭的系统外,几乎都。
SQL server,基本上就是一个微软自己的平台上的一个数据库,定位比较低端,说其实开放的数据库系统,老胡觉得都有点勉强,他的优势是微软本身掌握操作系统,和操作系统底层结合的很好,二期和其他的各种微软的产品结合的比较好,这算是一个应用吧,他非常适合那些win用户中用户量不大的数据管理和存储的需要。
489034603
数据库DB2的优化技巧
一、 监视开关
确保已经打开监视开关。
如果它们没有打开,您将无法获取您需要的性能信息。
要打开该监视开关,请发出以下命令:
489034603
二、代理程序
确保有足够的 DB2 代理程序来处理工作负载。
要找出代理程序的信息,请发出命令:db2 "get snapshot for database manager" 并查找以下行:
489034603
如果您发现Agents waiting for a token或Agents stolen from another application不为 0,那么请增加对数据库管理器可用的代理程序数(MAXAGENTS 和/或 MAX_COORDAGENTS取适用者)。
三、最大打开的文件数
DB2 在操作系统资源的约束下尽量做一个“优秀公民”。
它的一个“优秀公民”的行动就是给在任何时刻打开文件的最大数设置一个上限。
数据库配置参数 MAXFILOP约束 DB2 能够同时打开的文件最大数量。
当打开的文件数达到此数量时,DB2 将开始不断地关闭和打开它的表空间文件(包括裸设备)。
不断地打开和关闭文件减缓了 SQL 响应时间并耗费了 CPU 周期。
要查明 DB2 是否正在关闭文件,请发出以下命令:
db2 "get snapshot for database on DBNAME"
并查找以下的行:
Database files closed = 0
如果上述参数的值不为 0,那么增加MAXFILOP的值直到不断打开和关闭文件的状态停埂。
db2 "update db cfg for DBNAME using MAXFILOP N"
四、锁
LOCKTIMEOUT的缺省值是 -1,这意味着将没有锁超时(对 OLTP 应用程序,这种情况可能会是灾难性的)。
尽管如此,我还是经常发现许多 DB2 用户用LOCKTIMEOUT= -1。
将LOCKTIMEOUT设置为很短的时间值,例如 10 或 15 秒。
在锁上等待过长时间会在锁上产生雪崩效应。
首先,用以下命令检查LOCKTIMEOUT的值:db2 "get db cfg for DBNAME"
并查找包含以下文本的行:Lock timeout (sec) (LOCKTIMEOUT) = -1
如果值是 -1,考虑使用以下命令将它更改为 15 秒(一定要首先询问应用程序开发者或您的供应商以确保应用程序能够处理锁超时):db2 "update db cfg for DBNAME using LOCKTIMEOUT 15"
您同时应该监视锁等待的数量、锁等待时间和正在使用锁列表内存(lock list memory)的量。
请发出以下命令:
db2 "get snapshot for database on DBNAME"
查找以下行:
489034603
如果Lock list memory in use (Bytes)超过所定义LOCKLIST大小的 50%,那么在LOCKLIST数据库配置中增加 4k 页的数量。
五、临时表空间
为了改善 DB2 执行并行 I/O 和提高使用TEMPSPACE的排序、散列连接(hash join)和其它数据库操作的性能,临时表空间至少应该在三个不同的磁盘驱动器上拥有三个容器。
要想知道您的临时表空间具有多少容器,请发出以下命令:
db2 "list tablespaces show detail"
查找与以下示例类似的TEMPSPACE表空间定义:
489034603
注意Number of containers的值是 3,而且Prefetch size是Extent size的三倍。
为了得到最佳的并行 I/O 性能,重要的是Prefetch size为Extent size的倍数。
这个倍数应该等于容器的个数。
要查找容器的定义,请发出以下命令:
db2 "list tablespace containers for 1 show detail"
指的是tablespace ID #1,它是刚才所给出的示例中的TEMPSPACE1。
六、内存排序
七、表访问
八、表空间分析
九、缓冲池优化
十、SQL 成本分析
489034603
本来有十个技巧,由于篇幅有限,先写到这吧,希望大家能对数据库有更深入的了解,真正要掌握好这些技术还需要大家反复磨练,实际操作,闭门造车肯定是学不好技术的,不喜勿喷哦。
如果有小伙伴想要学习JAVA架构师技术的,可以加下图片下方的交流群,群里有很多架构师的资料可以下载学习,还有大神在群里可以一起交流讨论
数据库DB2与Oracle,SQL的优缺点及DB2的优化技巧
下一篇:返回列表