技术标签: aix DB2 db2 ibm 存储 数据库 sql
可使用db2greg 工具查看全局注册表。此工具位于 sqllib/bin 和 bin 下的 install 目录中(以供作为 root 用户登录时使用)。
可使用db2greg 工具编辑全局注册表。在 root 安装中编辑全局注册表需要 root 权限。
ps -elf | grep db2inst1
svmon -G
建立实例后修改
C:\IBM\SQLLIB>db2 update dbm cfg using DFT_MON_BUFPOOL on DFT_MON_LOCK on DFT_MON_SORT on DFT_MON_STMT on DFT_MON_TABLE on DFT_MON_UOW on
DB20000I UPDATE DATABASE MANAGER CONFIGURATION 命令成功完成。
C:\IBM\SQLLIB>db2 get dbm cfg |grep -i dft_mon
▒▒▒▒▒▒ (DFT_MON_BUFPOOL) = ON
▒▒▒▒ (DFT_MON_LOCK) = ON
▒▒▒▒ (DFT_MON_SORT) = ON
▒▒▒▒ (DFT_MON_STMT) = ON
▒▒ (DFT_MON_TABLE) = ON
ʱ▒▒▒▒▒▒ (DFT_MON_TIMESTAMP) = ON
▒▒▒▒▒▒Ԫ (DFT_MON_UOW) = ON
通过以上的分析,我们知道IBMDEFAULTBP设置的太大了(1300000*4K),连接数据库时导致系统宕机。所以我们下面设法将IBMDEFAULTBP改小。
操作步骤:
db2set DB2_OVERRIDE_BPF=10000
#使IBMDEFAULTBP使用这个值
db2 terminate
db2stop
db2start
db2 connect to db
#连上db
db2 alter bufferpool ibmdefaultbp numblockpages 0
#原来的块SIZE太大,我们这里禁用它
db2 force applications all
db2 connect to db
db2 alter bufferpool ibmdefaultbp immediate size 50000
#将SIZE改小
db2set DB2_OVERRIDE_BPF= #设置为空,还原回去
db2 terminate
db2 force applications all
db2stop
db2start
尽管每个数据库至少需要一个缓冲池,但可以为具有多个页大小的表空间的单个数据库创建几个缓冲池,每个缓冲池具有不同的大小或具有不同的页大小。每个缓冲池具有最小大小,这取决于平台。可以使用 ALTER BUFFERPOOL 命令来调整缓冲池大小。
新数据库具有称为 IBMDEFAULTBP 的缺省缓冲池,它的总大小是由平台确定的且缺省页大小基于创建数据库时指定的页大小。缺省页大小是作为 pagesize 参考数据库配置参数存储的。当创建缺省页大小的表空间且不给它分配特定缓冲池时,将给该表空间分配缺省缓冲池。可以调整缺省缓冲池调整的大小以及更改其属性,但不能将其删除。
缓冲池的页大小
创建或迁移数据库之后,可以创建其他缓冲池。可以创建使用 8 KB 页大小作为缺省值的数据库并且将用缺省页大小(在本例中为 8 KB 页大小)创建缺省缓冲池。或者,您可以创建使用 8 KB 页大小的缓冲池以及一个或多个具有相同页大小的表空间。此方法不要求您在创建数据库时更改 4 KB 缺省页大小。不能将表空间指定给使用另一种页大小的缓冲池。
使用 CREATE BUFFERPOOL 语句创建缓冲池时,可以指定特定缓冲池大小。如果未指定大小,那么它将设置为 AUTOMATIC 并由 DB2 管理。稍后要更改缓冲池的大小,使用 ALTER BUFFERPOOL 语句。
在一个分区数据库环境中,一个数据库的每个缓冲池在所有数据库分区上有相同的缺省定义,除非在 CREATE BUFFERPOOL 语句中另外指定了它,或 ALTER BUFFERPOOL 语句为特定数据库分区更改了缓冲池大小。
大缓冲池的优点
许多缓冲池的优点
启动时缓冲池内存分配
当使用 CREATE BUFFERPOOL 命令来创建缓冲池或使用 ALTER BUFFERPOOL 语句来变更缓冲池时,所有缓冲池需要的全部内存必须可供数据库管理器使用,以便在启动该数据库时可分配所有缓冲池。如果在数据库管理器联机时创建或修改缓 冲池,那么附加内存应在数据库全局内存中可用。如果在创建新缓冲池或增大现有缓冲池的大小时指定 DEFERRED 关键字,但所需内存不可用,那么数据库管理器在下次激活数据库时进行更改。
如果在数据库启动时此内存不可用,那么数据库管理器将仅使用最小大小为 16 页的系统缓冲池(每个页大小对应一个系统缓冲池)启动,并返回 SQL1478W(SQLSTATE01626)警告。数据库会继续保持在此运作状态,直到更改其配置且数据库可以完全重新启动为止。性能可能不是最佳 的。数据库管理器仅使用最小大小值启动来允许您连接至数据库,以便可以重新配置缓冲池大小或执行其他关键任务。只要执行这些任务,就重新启动数据库。不要 在这种状态下超长时间运行数据库。
为了避免仅使用系统缓冲池启动数据库,可以使用 DB2_OVERRIDE_BPF 注册表变量来调整所需的内存,以便它与可用内存相符。
Tip:如何快速定位问题
如果系统的CPU利用很高,IO很少,那么数据库的排序较多
如果系统的IO繁忙,CPU很多是wait,那么说明数据库有过多的IO
如果系统CPU,IO都很空闲,那么说明可以是有锁的问题
如果系统IO,CPU都非常忙,说明有执行代价非常高的sql在执行
数据库一般有三类的性能问题,一是CPU占用过多,二是IO过于繁忙,三是有锁等待。
1.快速找到执行成本较高的sql
首先要打开监视器的开关
db2 update monitor switches using bufferpool on lock on sort on statement on table on uow on
在系统最繁忙的时候,运行
db2 get snapshot for all applications > app.out
然后在该文件中查找处于Executing状态的应用,找到执行的对应的sql语句。 网页教学网
如果用这种方法找不到,可以收集sql的快照
db2 get snapshot for dynamic sql on > sql.out
这个快照记录了动态语句的快照信息,可以根据
Total execution time (sec.ms) = 0.000000
Total user cpu time (sec.ms) = 0.000000
Total system cpu time (sec.ms) = 0.000000
这些信息来找到最耗时的语句。
2.如何优化sql语句
DB2提供了很好的工具来做sql语句优化。首先要对找到的sql语句进行分析,看是否是该语句引起了性能问题。我们可以使用db2expln来查看sql语句的访问计划和执行成本。
首先将找到的sql语句写到一个文本文件中sql.in,以“;”结尾,然后运行
db2expln –d -f -z “;” –g –o sql.exp
查看 sql.exp可以看到这个sql语句的执行成本。
如果确认该语句有问题,可以使用db2advis来通过建索引的方法来优化该语句
db2advis –d -i sql.in
如果通过创建索引无法优化该语句,一般只能从业务角度优化。
3.如果发生锁的问题如何处理
发生锁的问题,一般有两种情况,一是锁等待,二是死锁。首先检查数据库配置参数locktimeout,该参数一定不能设为-1,因为会引起某些应用无限期的等待。
可以通过快照来确定数据库发生的问题是哪一种。
db2 get snapshot for db on
查看输出中的下列内容:
Deadlocks detected = 0
Lock Timeouts = 0
如果发生了死锁,可以通过创建死锁监视器来分析产生死锁的原因,命令如下: Webjx.Com
mkdir /tmp/dlmon
db2 connect to
db2 create event monitor dlmon for deadlocks with detail write to file ‘/tmp/dlmon’ replace
db2 set event monitor dlmon state 1
…..等有死锁发生后
db2 set event monitor dlmon state 0 网页教学网
db2evmon –d /tmp/dlmon >/tmp/dlmon.out
分析/tmp/dlmon.out文件就可以找到造成死锁的信息,结合应用就可以找到造成死锁的原因了。
四、应用开发与数据库有关的问题
1.与64位实例数据库问题
目前随着硬件的升级,64位实例数据库开始广泛使用。 Webjx.Com
有些人担心数据库使用64位以后,对程序的运行很大,因此不愿意使用64位的数据库,实际上64位数据库对客户的应用影响非常小,所以建议如果资源充足,尽量使用64位实例的数据库。
可以通过创建一个32位实例的客户端,然后通过客户端来使用64位实例数据库的方法来将64位的问题完全忽略。
如果使用java 存储过程或自定义函数,64位实例数据库需要安装64位的JDK。
2.从DB2 V7移植程序到V8有关问题
sqlc的应用程序中,数据类型long在V8中需要改成sqlint32,否则编译无法通过。如果确定long类型的数据长度与平台无关,也可以在编译时,指定LONGERROR NO选项。
在编译sqlc程序时可能会遇到sql20230的错误,原因是在V8中不允许在call中使用主机变量,将执行语句改成动态sql后,可以解决该问题。
在执行存储过程时,遇到sql0433的错误,原因同上,将call 存储过程的语句改成动态调用即可。
3.Java程序问题
编写良好的程序是避免产生问题的关键。对JAVA程序有如下建议,一定要用数据库的连接池;在执行大量的sql语句时使用prepared statement。
文章浏览阅读2.1k次。原文链接先说说编解码问题编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 Eg:str1.decode('gb2312') #将gb2312编码的字符串转换成unicode编码str2.encode('gb2312') #将unicode编码..._python中encode在什么模块
文章浏览阅读949次,点赞21次,收藏15次。本文介绍了Java中的数据输入流(DataInputStream)和数据输出流(DataOutputStream)的使用方法。
文章浏览阅读111次。ie无法兼容_ie 浏览器 newdate
文章浏览阅读239次。这篇文章把 Docker 和 K8s 的关系给大家做了一个解答,希望还在迟疑自己现有的知识储备能不能直接学 K8s 的,赶紧行动起来,K8s 是典型的入门有点难,后面越用越香。
文章浏览阅读561次。ADI中文手册获取方法_adi 如何查看数据手册
文章浏览阅读1k次,点赞4次,收藏3次。React 获取接口数据实现分页效果以拼多多接口为例实现思路加载前 加载动画加载后 判断有内容的时候 无内容的时候用到的知识点1、动画效果(用在加载前,加载之后就隐藏或关闭,用开关效果即可)2、axios请求3、map渲染页面4、分页插件(antd)代码实现import React, { Component } from 'react';//引入axiosimport axios from 'axios';//引入antd插件import { Pagination }_react 分页
文章浏览阅读449次,点赞9次,收藏7次。这个变量与验签过程中的SignatureVerificationFilter::PUT_MESSAGE这个宏是对应的,SignatureVerificationFilter::PUT_MESSAGE,如果在签名过程中putMessage设置为true,则在验签过程中需要添加SignatureVerificationFilter::PUT_MESSAGE。项目中使用到了CryPtopp库进行RSA签名与验签,但是在使用过程中反复提示无效的数字签名。否则就会出现文章开头出现的数字签名无效。_cryptopp 签名
文章浏览阅读848次。新闻稿是新闻从业者经常使用的一种文体,它的格式与内容都有着一定的规范。本文将从新闻稿的格式和范文两个方面进行介绍,以帮助读者更好地了解新闻稿的写作_新闻稿时间应该放在什么位置
文章浏览阅读1.7k次。Java中的转换器设计模式 在这篇文章中,我们将讨论 Java / J2EE项目中最常用的 Converter Design Pattern。由于Java8 功能不仅提供了相应类型之间的通用双向转换方式,而且还提供了转换相同类型对象集合的常用方法,从而将样板代码减少到绝对最小值。我们使用Java8 功能编写了..._java转换器模式
文章浏览阅读150次。1,kubectl run创建pods[root@master ~]# kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1[root@master ~]# kubectl get podsNAME READY STATUS REST...
文章浏览阅读128次。PAT菜鸡进化史_乙级_1003“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是: 1. 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符; 2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或..._1003 pat乙级 最优
文章浏览阅读5.6k次。CH340与Android串口通信为何要将CH340的ATD+Eclipse上的安卓工程移植到AndroidStudio移植的具体步骤CH340串口通信驱动函数通信过程中重难点还存在的问题为何要将CH340的ATD+Eclipse上的安卓工程移植到AndroidStudio为了在这个工程基础上进行改动,验证串口的数据和配置串口的参数,我首先在Eclipse上配置了安卓开发环境,注意在配置环境是..._340串口小板 安卓给安卓发指令