DB2性能调优中易出现的问题有哪些? (db2性能调优)

教程大全 2025-07-17 03:30:38 浏览

在这里主要向大家描述的是DB2性能调优的实际操作过程中工程师经常遇到的20个问题,我们大家都知道DB2数据库设计中物理设计在一般的情况下应该尽可能的和逻辑结构相近,但是为性能做出的物理设计改变不能被忽略,因为它们并不来自于逻辑设计。

1、逻辑设计应该总是能和物理设计完全映射

实际:DB2数据库设计中物理设计应该尽可能的和逻辑结构相近,但是为DB2性能做出的物理设计改变不能被忽略,因为它们并不来自于逻辑设计。

2、将所有东西放在一个缓冲池(BP0)中让DB2管理

实际:就像在DB2手册和其他地方说明的一样,你只能在你的内存非常受限的情况下(10000 4k pages或者更少),你没有时间去管理它,你也没有考虑到性能的条件下,去这样做。***这样说:不要放置除了DB2 catalog和目录以外的东西进入BP0。

3、DSNDB07是100%顺序的

实际:DSNDB07从来就不是100%顺序的,因为有工作文件中的对页面进行的随机活动。随即活动可能高达45%,但是通常范围是3%到10%。

4、VARCHAR应该总是被放置在行末

实际:这就是总是引发问题的话。如果表总是被读,并且非常少的更新,那么可以,这将会减少CPU负载,但是在其它情况下这样做就是最坏的,甚至如果表是被压缩的。只有在频繁更新的情况下它应该被放置在末尾,但是并不通常这样。

5、程序应该以遵循逻辑过程的方式编码

实际:伪代码或者一个逻辑过程图并不需要考虑DB2性能相关的编码方式。在OLTP交易代码中这非常具有戏剧性。

6、大多数过程不在SQL中进行

实际:事实上,问题的反面往往是正确的。SQL是一个非常丰富的语言,能够处理大多数过程。实际上***的困难是SQL经常被用来作为I/O处理器而不是一个集合处理器。

7、代码和引用表应该和DB2声明的referential integrity(RI)一起使用

db2性能调优

实际:RI不应该作为一个编辑有效性的快捷方式而使用,这通常属于别的什么,但是应该在真父子关系中使用。

8、表至多有一到两个索引

实际:表应该按照性能需求拥有多个索引。

9、非分割索引(NPI)不应该被使用,尤其是不应该在大的表中使用

实际:这关系到数不清的问题,总体上这些都能被克服,但是NPI是对适当的访问和性能非常必要的。

10、大表应该被分割

实际:因为一个表中有太多数据就意味着有性能下降,这是一个遗留的担心。当一些表中有超过60亿行数据时,这个理解已经被消除了。

11、DB2缺省就是好的

实际:缺省的一般不是***的,他们因版本不同而改变。比如考虑绑定参数CURRENTDATA。

12、不要在SQL WHERE谓词里使用否定

实际:另外一个这种规则并没有被解释清楚。只有谓词是一个否定时,SQL访问路径可能使用一个不必要的表空间扫描。但是在其它的多数情况下,多余的过滤应该在DB2引擎里完成,这会较好。

13、我可以只依靠EXPLAIN来决定是否访问路径是好的

实际:EXPLAIN不显示执行的查询块的顺序,不会告诉你1或者2阶段的谓词,不会告诉你一个块会多长时间执行一次。基本的,EXPLAIN只是导出一些数据到一个表里,然后结合其他一些信息来进行更多的一些解释。有一些工具来帮助处理此过程(如Visual Explain),但是如果所有的事实都没有被考虑的话,这样的方式只会带来坏处。

14、不要做EDM池太大以避免其分页

实际:EDM池通常通过分页来提升DB2性能(这里分页是指扩展存储,而不是磁盘)而不是变得更小并且因为页面置换和其他因素持续重建内部结构。

15、扩展不会关系其他任何东西

实际:什么时候开始的?未来如果世界上充满了SAN或者ESS,那差不多。扩展的影响已经因为新的磁盘缓存控制器而变得很小了,但是仍然有一些额外的检查和处理需要来管理它们。

16、关系的划分不会在DB2中使用

实际:关系的划分已经在过去的许多系统中被使用了,可以有效的通过数据库设计者和程序开发者来实现。在目前的商业智能(BI)和市场系统中,它可以被数次用在每个单个程序中。

17、将所有的包绑定到两个计划中:一个批处理和一个在线的

实际:在介绍DB2包的时候,这是一个不好的陈述。有许多理由可以说这个理解是错误的。

18、未授权的读是不好的

实际:未授权的读并不是一个四字单词但是是一个非常好的性能增强,可以被用在比经常理解的更多的地方。

19、在没有超时和死锁的情况下不会有锁问题

实际:事实上没有一个问题发生并不意味着没有需要关注的的DB2性能问题。经常锁定不被认为是一个问题,因为注意力主要放在反应的调节测量(统计死锁或者超时的数量),而不是后发式的调节(监控锁等待时间)。

20、ESA数据压缩总是好的

实际:当压缩能被在很多地方起作用时,有一些情况它能带来问题。每种情况都要在压缩使用前决定是否使用它。这不是可选的,而是必须要在高层决定是否使用还是不使用。

【编辑推荐】


寻仙中寄售交易平台有哪些功能

可以进行“浏览当前寄售的物品列表”、“出售”、“购买”,三个主要功能。

Java中Set、List、Map集合类(接口)的特点及区别。分别有哪些常用实现类。

list与Set、Map区别及适用场景1、List,Set都是继承自Collection接口,Map则不是2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。 ) 和List对比: Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。 List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。 适合储存键值对的数据5.线程安全集合类与非线程安全集合类 LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;HashMap是非线程安全的,HashTable是线程安全的;StringBuilder是非线程安全的,StringBuffer是线程安全的。 下面是具体的使用介绍:ArrayList与LinkedList的区别和适用场景Arraylist:优点:ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)。 缺点:因为地址连续, ArrayList要移动数据,所以插入和删除操作效率比较低。 LinkedList:优点:LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,对于新增和删除操作add和remove,LinedList比较占优势。 LinkedList 适用于要头尾操作或插入指定位置的场景缺点:因为LinkedList要移动指针,所以查询操作性能比较低。 适用场景分析:当需要对数据进行对此访问的情况下选用ArrayList,当需要对数据进行多次增加删除修改时采用LinkedList。 ArrayList与Vector的区别和适用场景ArrayList有三个构造方法:Java代码public ArrayList(int initialCapacity)//构造一个具有指定初始容量的空列表。 public ArrayList()//构造一个初始容量为10的空列表。 public ArrayList(Collection c)//构造一个包含指定 collection 的元素的列表 Vector有四个构造方法:Java代码public Vector()//使用指定的初始容量和等于零的容量增量构造一个空向量。 public Vector(int initialCapacity)//构造一个空向量,使其内部数据数组的大小,其标准容量增量为零。 public Vector(Collection c)//构造一个包含指定 collection 中的元素的向量public Vector(int initialCapacity,int capacityIncrement)//使用指定的初始容量和容量增量构造一个空的向量ArrayList和Vector都是用数组实现的,主要有这么三个区别是多线程安全的,线程安全就是说多线程访问同一代码,不会产生不确定的结果。 而ArrayList不是,这个可以从源码中看出,Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比;2.两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同。 可以设置增长因子,而ArrayList不可以。 是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。 适用场景分析是线程同步的,所以它也是线程安全的,而ArrayList是线程异步的,是不安全的。 如果不考虑到线程的安全因素,一般用ArrayList效率比较高。 2.如果集合中的元素的数目大于目前集合数组的长度时,在集合中使用数据量比较大的数据,用Vector有一定的优势。 HashSet与Treeset的适用场景 是二差树(红黑树的树据结构)实现的,Treeset中的数据是自动排好序的,不允许放入null值 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束 要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,hashcode是一样,所以放入的内容不能重复。 但是同一个类的对象可以放入不同的实例适用场景分析:HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。 为快速查找而设计的Set,我们通常都应该使用HashSet,在我们需要排序的功能时,我们才使用TreeSet。 HashMap与TreeMap、HashTable的区别及适用场景HashMap 非线程安全HashMap:基于哈希表实现。 使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。 TreeMap:非线程安全基于红黑树实现。 TreeMap没有调优选项,因为该树总处于平衡状态。 适用场景分析:HashMap和HashTable:HashMap去掉了HashTable的contains方法,但是加上了containsValue()和containsKey()方法。 HashTable同步的,而HashMap是非同步的,效率上比HashTable要高。 HashMap允许空键值,而HashTable不允许。 HashMap:适用于Map中插入、删除和定位元素。 Treemap:适用于按自然顺序或自定义顺序遍历键(key)。

装修橱柜用什么材料最好?

橱柜板面家庭用水晶门板:具有豪华、靓丽等优点,是理想的装饰材料。 水晶片加热可弯曲,易造型,施工安装快捷简便等特点。 表面无细孔,防水、防潮、防油烟污渍,清洁打理极其简便。 吸塑板:吸塑板的优势抗磨程度高,可以直接用钢丝球清洗,不会损害表面和颜色。 但吸塑板的缺点是怕热,哪怕是一个小烟头也会让表面的膜破损。 烤漆板:耐磨性能欠佳,耐水防潮性能佳.市场上目前常见的橱柜面板有烤漆板、镜面树脂板、吸塑板、防火板和三塑氢氨板几种。 测试一:耐磨性能测试方法:用钢丝球在这五种面板上用相同力度进行划擦,测试它们的磨损程度。 测试结论:在耐磨性方面,镜面树脂板和烤漆板的耐磨性能欠佳,这是由于它们表面光滑, 所以使用中的划擦会在面板上留下痕迹。 三聚氢氨板 吸塑板和防火板都有不错的耐磨性能。 测试二:防水性能测试方法:把这五种面板浸入水里24小时,看它们的变形程度。 测试结论:在防水性能方面:防火板的防水性能最差,浸水后变形严重,这是因为防火板是热压成型的。 三聚氢氨板的防水性能一般,浸水后有轻度膨胀现象。 烤漆板、镜面树脂板和三聚氢氨板都有很好的耐水防潮性能测试三:耐高温性能测试方法:我们用加热到100摄氏度的电熨斗来模拟厨房里的高温操作对橱柜造成的影响。 测试结论:在耐高温性能方面,吸塑板表面的耐高温性能最差,由于它的表面是一层PVC膜,所以遇到高温会留下印痕。 烤漆板和镜面树脂板的耐高温性能一般,这是因为它们受热后会产生变色现象,但几分钟后 变色情况有很大改善 基本恢复到原来的状态。 三聚氢氨板和防火板的耐高温性能最佳。 测试报告: 耐磨性防水性耐高温性烤漆板 一般好一般镜面树脂板 一般好一般三聚氢氨板好 一般 好防火板好差 好吸塑板好好 差对色彩要求高 追求时尚的消费者可以选择烤漆板或镜面树脂板的橱柜,不过由于它不耐划刮,所以需要注意保养和维护。 如果您对橱柜面板的造型有较高要求,那就可以选择吸塑板,因为它的立体造型非常丰富。 追求简约、强调物美价廉的消费者可以选择三聚氢氨板来制作您家的橱柜。 要是您家的厨房使用率比较高,特别重视经久耐用性,同时愿意牺牲一些橱柜的美观性 ,那么您可以选择防火板。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐