- 浏览: 387422 次
文章分类
最新评论
-
小尜:
写的很详细,也很简单,一看就懂。多谢啦。
关于工厂模式和spring的IOC -
fjjiaboming:
代码排版!!!!!
JDBC事务和JTA (XA)事务 -
fjjiaboming:
排版有问题吗? 望交流.
做人有三个层次 -
fjjiaboming:
看来数据库连接池 必须用JNDI 注册在容器 , 对吗?
JDBC事务和JTA (XA)事务 -
fd1803:
SSL工作原理:http://www.wosign.com/B ...
SSL(Server Socket Layer)简介
原文:
http://blog.csdn.net/best_dba/archive/2006/07/21/952837.aspx
(颜色为我加,为看起来更醒目)
创新性应用:
对于如今日渐成熟的数据库家族,真正能够在数据库引擎做到创新已经不是一件简单的事情。三大主流数据库oracle, db2和sqlserver真正在每个版本之间提供的不过是对于更多的接口的支持,让数据库能够更有效地做到性能自我调整,支持更多的数据类型,修复过去的bug或者对内存磁盘结构作一些优化调整。真正能够喊出创新这个口号的我想近期也只有DB2对于XML的支持了。
基于早先IBM提出的关系型数据库的架构,所有的主流数据库都逃脱不了类似的架构,每一个表之间的关系被各种各样的constraint所限定,当需要查询一些信息的时候需要对这些表之间做出复杂的join运算得到最终的结果。同时,所有的信息都被分割到一块块小的表中,这样的架构对于如今流行的跨平台跨应用程序之间的数据交换格式XML来说就显得相当不灵活。
XML叫做Extensible Markup Language, 是一种灵活的语言。在其中用户可以标记自己的tag来定义其数据类型。在这些tag中用户可以自己定义elements或者attributes的名称,这样的话只要得到了XML文件即使另一个对此系统毫不知情的用户也可以很轻易地读懂这些数据。
这样的话,当不同的用户或者应用程序在交换数据的时候,只要遵循XML标准,每一个应用程序可以针对自己所使用的数据类型编写XML解释器,将XML文件中的数据轻易地转化成自己使用的数据类型,这样就可以保证在不同的应用程序之间数据得以快速地交流。
但是作为存储数据的数据库,以往的基于关系的表并不能够很好地适应这种新的需求。用户仍然需要花费大量时间将XML数据转化到关系类型然后输入数据库,或者根据需要编写复杂的查询再将这些数据读取出来。这种方法虽然可行但是对开发者来说无疑于添加了很大的难度,同时从效率上来看,原本的XML文件会被重新解析到各个表中,这个过程对于复杂或者有着大数据量的系统来说是相当消耗资源的。因而,对XML从底层上的支持使得IBM DB2数据库相对于其他数据库管理系统来说有了大幅度的创新。
实际上,DB2 v9对于XML的支持不仅仅体现在XML类型的数据上。一些用关系模型难以解决的问题也可以使用XML模型得以比较轻易地解决。
首先一些以往基于继承类型的数据尽管可以使用关系模型解决,但是需要用到一些递归SQL。但是如果使用XML模型则可以从根本上模拟实现出这种逻辑上的关系。
还有一些极端的数据类型假如使用通常的星型拓扑逻辑可能会产生大量几乎无法管理的小表,尽管每个表中可能只有几条数据,并且某些数据之间的join在理论上是可行的,但是在实际的业务逻辑中却是完全不make sense的,在这种情况下维护以往的关系型数据就会对管理员造成不便,因为同时处理大量表的join会使得性能显著下降(大量的CPU,磁盘操作与内存分配)。但是假如我们将这种数据类型带入XML,很多在关系模型中非常难以处理的问题就会随着结构的不同迎刃而解。
不过计算机技术中没有完全的好与坏,XML在赋予用户另一种存储结构的同时也有着一些值得考虑的因素。
XML的灵活性使得存储数据的单元必须能够接受不同格式的数据,这样就会造成检索的时候为了能够处理各种格式而造成CPU和内存的开销。但是这并不是绝对的。假如一个数据类型需要被分隔在很多表中,对于表的join数据库必须要生成临时表,大量临时表的生成和操作同样会降低性能,而这种开销我们知道在XML模型中可能就是可以完全避免的。所以在选择XML模型和关系模型的时候需要针对具体的业务进行具体分析。
但是db2 v9还没有经历过市场的检验,所以对于XML是否能真正得到用户的认可还是一个未知数。不过从对XML与经典的关系数据模型相比其具有的优势还是不可忽略的。
行业借鉴经验:
在DB2技术支持小组中的每一个case都很值得IBM以外的DBA借鉴。
但是我们很少涉及对于客户项目大框架的问题,所作的工作完全是基于一个个错误信息,unexpected behavior以及性能/内存泄路等细致问题。
在defect support小组中一年以来的经验使我认识到深入了解DB2的内存结构对一个合格的DBA甚至开发员来说都是必不可少的。
我们经常可以见到32位系统中stack与data冲撞的问题,就是说原本只有256MB的私有寻址空间被占满,并且用户没有合理地设置ulimit造成数据库系统crash。
或者经常客户在32位系统中使用大量的bufferpool造成内存耗尽。可是有的人还抱怨“我们操作系统有16G的内存并且只有2个副本,为什么这个数据库分配2G的bufferpool就完蛋了?vmstat还显示我们有很多内存呢!”假如他们能够理解32位应用程序的寻址方法,db2在各个系统下内存的分配模型他们就不会产生这种问题了。
同样开发员也应该理解内存模型。很多人编写的过于复杂的SQL会消耗大量的statement heap,甚至在优化器部分都不能够很好地优化重写原本的语句,这样可能就会造成不必要的NLJOIN或者temp table,对于几个有着几千万行的表查询多使用一个temp table结果绝对是灾难性的。
不过上面的那些东西需要至少一年以上的经验和摸索才能够基本掌握,下面有一些比较有效的寻找问题的方法。
首先当系统出现问题的时候一定不要惊慌失措,以平常心慢慢地narrow down问题才能够最快地找到答案。
一般管理员遇到的问题不外乎几种:
1) 错误信息,可以重现或者不可重现
2) unexpected behavior,比如db2move当force之后向默认数据库继续load数据
3) 性能问题,分为两大模块
A) 整机性能下降
B) 单独查询性能下降
这些问题每一个类型都有自己的特征,也需要有针对性地进行分析。
在论坛上与DBA讨论的时候经常会发现有很多DBA对于问题分析的过程还是一团迷糊,实际上其根本原因还是在于对DB2的底层架构理解的不够深入和对各种各样的工具(db2batch, db2exfmt)不能够灵活运用。
比如以上提到的错误信息,基本大部分的错误信息都可以从提示中获取解决方案,但是有一些复杂的问题也许甚至db2diag.log里面都不能给出明确的信息,这个时候db2trace就是最有效的武器。Db2trace可以对db2进行内部函数调用级别的追踪,同时还能够监测一些重要变量的变化。当然大部分时候需要对照源程序才能够有所收获,但是我也见过很多trace不需要对照程序就能够理解其流程。而那些重要的内存变量可以很清晰地告诉我们问题发生的那一刻一些参数的变化,很多情况下比如里面出现一个奇怪的路径或者数值,我们就可以查找和那些东西是否有关。
对于unexpected behavior,仔细地阅读文档并且理解相应模块的运作才是根本的解决之道。除此之外也许db2trace是唯一可行的方法了吧。
而性能问题是对所有的DBA来说都是头疼的。其中对于DB2参数的优化并不是很复杂,需要的是对DB2内存模型和运作机制的深入理解,但是对于3-B才是最为复杂的。因为一个查询的性能取决于太多的方面,包括bufferpool hit ratio, 访问计划,执行计划,分区键的设置等等。经常可以见到一个搞DB2很多年的专家也不见得能在这方面有所建树。需要大量的练习并且阅读很多文章才可以理解优化器编译器这部分东西。
应用难点技巧:
与其他两款主流数据库管理系统比起来,DB2有其优势也有自己的不足。
在处理datawarehouse系统上DB2的性能应该是非常优秀的,同时DB2对优化器做的相当完美,对于大部分复杂查询可以有效地将其重写为最优语句,并且分配合理的执行计划。
但是DB2在concurrency control上与locking mechanism上有一定的不足。但是这与DB2的设计框架相关,内存锁的使用在提升效率的同时也对系统的优化要求提到了最高。一个没有得到良好优化的数据库和应用程序经常会出现锁等待的结果,很多人将这方面归结于db2的问题,实际上我们遇到的大部分问题都是客户自己对应用程序与优化做的不足所导致的。
并且DB2在API与function/procedure的提供上还不完善。但是多伦多实验室的人正在尽力完善这个模块,在V9中我们期待看到更多更为强大的函数。
因而我认为在DB2的管理上真正的难点就是在于优化。也许完整地介绍优化需要800页的教材加上一星期的课时,因此在这里就不多说了。
同时对于所有的数据库系统高可用性也是一个比较令人头疼的问题。在DB2种的高可用性对于普通用户来说可能比较复杂,但是我们有一些经典的技术文档可以用来参照自己设置。
对于管理多分区系统的DBA来说,怎样对各分区协调,如何合理地设置分区键是最为重要的。但是作为我们技术支持小组的人,真正深入理解各分区之间的通讯与工作机制才是最重要的。
我记得以前看过一篇文章有个人在口口声声说db2的share nothing架构是骗人的东西,那绝对是因为他对db2多分区理论只是做了一些文字上的理解,但是对于其中的内存,CPU,磁盘资源的分配却根本没有理解。
也许很多人都认为DB2比起其他的数据库系统要复杂很多,但是我个人认为那是由于这些人对其底层的架构和模型不了解所导致的。真正意义上的理解DB2以后就会发现其中的每一个模块都是经过精心设计的。只要完整地优化系统一般来说就不会出现很多朋友所遇到的问题。
======全面深入的了解db2,然后精心,完整的优化自己的系统。
发表评论
-
考试成绩
2011-03-19 11:56 0uuuuuuuu -
db2cat 命令
2009-06-24 21:53 1972今天无意看到一个命令:db2cat(系统目录分析). 现把测 ... -
关于db2分区特性的一点心得
2008-10-29 00:31 2437最近了解了下db2的分区特性,发现不是想象中的那样强大,而且 ... -
痛饮咖啡,熟读手册,方可为DBA
2008-10-25 16:09 1241嫦娥上天了。为了庆祝 ... -
关于db2diag.log里面ZRC和ecf的说明
2008-09-28 16:41 4961今天同事给了个db2diag。log文件给分析下 ,对其中的e ... -
关于db2dart dbname /dhwm /tsi 的测试
2008-08-08 01:25 1910下面是db2dart database /dhwm /tsi ... -
db2 初级证书:730.731
2008-07-01 21:29 1346一个偶然的机会,获得了 这2个证书.要学的很还多 db os ... -
关于db2的OLAP的一些函数
2007-07-21 17:00 1415看到人家说OLAP函数的强大,到网上搜了一般。看了下面2个文章 ... -
db2学习笔记(二)
2007-07-15 21:22 2180表空间方面: 1.创建数据库的时候,默认会有3个页大小为4k的 ... -
DB2资料(REDBOOK) 转载
2007-07-11 15:16 2461原文为:http://bbs.chinaunix.net/ar ... -
不管怎么强调sortheap的重要性都不为过
2007-07-10 00:14 2825今天看了一篇文章,觉得不管怎么强调sortheap的重要性都不 ... -
db2学习代码例子(代码为转载网上)
2007-07-05 14:31 2216搞db2也2年了,一直都没搞过存储过程,最近想学下,到网上 ... -
DB2SQL存储过程语法官方权威指南(翻译)(转载)
2007-07-04 21:07 2456这个还不错,网上这个文章太多了 : 背景:DB2的数据库性能很 ... -
DB2 存储过程开发最佳实践(转载)
2007-07-04 17:00 6257这个文章对初学者理解 ... -
java调用db2存储过程例子(新手用,熟悉的就不用看了)
2007-07-04 14:15 10990搜索java 调用db2(版本为8.2)存储过程 没几个文章能 ... -
最近db2学习笔记(06.29--07.03)
2007-07-03 20:03 4207有点乱 ,我认为重要的 ... -
关于DB2数据库的ADM11003E和ADM0501C错误的处理(转载)
2007-06-28 10:55 3977补充说明:对于第一个错误,如果你确信你的系统没有使用存储过 ... -
JDBC的隔离级别研究
2007-04-03 18:37 2334在通过JDBC对数据库进行并发访问时,为了解决并发之间的锁的控 ... -
在JBoss中配置DB2的数据源
2007-03-30 17:34 2448在用myeclipse+db2学习hibernate时,老报 ... -
编写高性能的mysql语法
2007-03-27 15:18 1228...
相关推荐
计202-2-03-王涛-锅炉策略-2.MCG
worktile-王涛-当研发遇上OKR
为普及大数据相关知识,促进广州、深圳地区大数据爱好者的交流,增强企业使用大数据相关开源项目的意识,特地举办了“大数据开放日”深圳活动。 本活动由 CSDN CODE与腾讯大讲堂联合主办,活动同时得到了CSDN战略...
演讲人:王涛,SequoiaDB巨杉数据库联合创始人兼CTO 演讲介绍:SequoiaDB(巨杉数据库)是一款分布式文档型NoSQL数据库,是业界唯一支持事务和SQL的产品。SequoiaDB既可作为Hadoop与Spark的数据源以满足实时查询和...
The term metal fatigue refers to gradual degradation and eventual failure that occur under loads which vary with time, and which are lower than the static strength of the metallic specimen, component ...
- 王涛可以通过培训和指导帮助员工理解新的管理方式的意义,强调反馈和跟踪的重要性,以便他们更好地适应。 6. **建立有效的沟通机制**: - 王涛需要建立一种既能保证信息畅通,又不会让员工感到压力的沟通机制。...
1. **王志伟-机器视觉与人工智能在工业领域的应用** 该文档提供了天准科技股份有限公司关于机器视觉与人工智能在工业领域的应用信息。天准科技自2005年成立以来,经历了快速发展,尤其是在视觉装备平台领域,涉及...
1. **王志伟-机器视觉与人工智能在工业领域的应用** 该文档提供了天准科技股份有限公司关于机器视觉与人工智能在工业领域的应用信息。天准科技自2005年成立以来,经历了快速发展,尤其是在视觉装备平台领域,涉及...
9. **未来风控发展趋势**:民生银行将继续强化风控基础,王涛的专业领导将推动风控评估与管理工作持续创新,以应对未来的挑战。 总结来说,王涛的事迹展示了金融风险控制在银行业务中的核心地位,以及一位优秀风险...
【大学生创新性实验答辩PPT模板】是一个针对大学生创新实验计划项目的总结汇报材料,主要涉及网络安全自动探测与攻防系统的研发。该项目旨在设计并实现一套能够自动化探测和防御网络安全威胁的系统,同时培养大学生...
本篇文章将介绍如何利用开源NoSQL数据库以及Apache Spark技术来构建一个一体化的大数据平台,并讨论其在金融行业的具体应用。 首先,我们需要了解什么是开源NoSQL数据库,以及为什么要使用它。NoSQL数据库(非关系...
【基于支持向量机的软件缺陷预测模型】是一种利用机器学习技术来预测软件系统中可能出现缺陷的方法。...该模型通过迭代和增量学习不断自我优化,适应软件开发过程中的变化,提高了预测的准确性和实用性。
为了提供有价值的IT知识,我需要更具体的信息,例如压缩包内的文件类型、主题内容、是否关于编程、网络技术、数据分析、操作系统、软件应用等相关领域。 请提供更多的详细信息,这样我就能为您编写一篇详尽的文章,...
《C++版数据结构》一书由王红梅、胡明、王涛三位专家编著,提供了深入浅出的讲解和丰富的习题,旨在帮助读者理解和掌握数据结构的基本概念、算法及其C++实现。 1. **数组**:数组是最基本的数据结构,它在内存中...
《你必须知道的.NET》是王涛撰写的一本关于.NET技术的经典著作,它以其独特的视角和深入浅出的讲解方式,成为了.NET开发者必备的参考书籍之一。这本书的第二版更是结合了作者多年的实践经验,对.NET框架的核心概念和...
《王涛雷电游戏》是一款由开发者王涛自制的基于Java平台的小型游戏,它以经典的雷电系列为空战主题,旨在为玩家提供一个轻松愉快的游戏体验。在这款游戏中,玩家将扮演一名飞行员,驾驶战机在广阔的天空中与敌机进行...
SequoiaDB和Spark是当前金融行业中较为重要的两种技术应用。SequoiaDB是巨杉数据库,是一款新一代的开源NoSQL数据库,由广州巨杉软件开发有限公司(简称巨杉软件)于2011年推出。它能够处理巨大的数据量,并且支持...
《你必须知道的.NET微软C# MVP王涛著》是一本专门为C#开发者和.NET平台学习者准备的书籍,由知名技术专家、微软C# MVP(Most Valuable Professional)王涛撰写。这本书深入浅出地介绍了.NET框架的核心概念、C#编程...
分布式技术整体架构的优点在于提高了数据库的可扩展性、提高了数据库的可靠性和安全性等。 六、计算存储分离架构 计算存储分离架构是指将数据库的计算和存储功能分离,以提高数据库的性能和可靠性。计算存储分离...