1.
unix 上增加环境db2的变量、:
在 /db2home2/db2inst2/sqllib 下的db2profile 里加入:
if [ -f ${INSTHOME?}/sqllib/userprofile ]; then
. ${INSTHOME?}/sqllib/userprofile
fi
并且在用户的配置文件中也加入这句。
.profile 文件里
3.
检查数据库上的锁的情况:
[/home/liqiheng]$more lock_check.sh
#!/usr/bin/ksh
dbname=$1
filename=find.locksql.$(date+'%m%d%H%M%S')
touch $filename
echo now,connecting to database:$dbname
db2 "connect to $dbname"
echo now,finding the SQLS which made lockwait
db2 "select agent_id,substr(stmt_text,1,100) as statement,stmt_elapsed_time_ms
from table(snapshot_statement('zjbi2',-1)) as B
where agent_id in
(select agent_id_holding_lk from table(snapshot_lockwait('zjbi2',-1)) as A
order by lock_wait_start_time asc fetch first 20 rows only)
order by stmt_elapsed_time_ms desc" > $filename
4.
查看数据库锁 :
db2pd -alldbpartitionnums -db zjbi2 -locks wait showlocks>>/tmp/locks.txt
db2pd -alldbpartitionnums -db zjbi2 -transactions>>/tmp/trans.txt
5.
要了解一个表存在什么类型的索引,执行 INSPECT CHECK 命令。
要将 Type 1 索引转换为 Type 2 索引,执行 REORG INDEXES CONVERT 命令
db2 " inspect check database results keep inspect.rel "
然后解析成格式化的内容 db2inspf inspect.rel.000 inspect.out.000
db2 "inspect check tablespace tbspaceid 2 results keep inspect.rel"
db2 inspect check database begin TBSPACEID 11 OBJECTID 2 results checkts.out
db2 reorg indexes all for table oracle.t1 convert 转变为 type-2 索引
type-1与type-2的区别,一个是物理删除,一个是伪删除,只是记录一下删除信息
Restart db db_name 如何激活数据库? Activate db db_name
6.计算缓冲池的命中率:
select snapshot_timestamp, substr(db_name,1,10) as dbname,
substr(bp_name,1,18) as bufferpool, total_hit_ratio_percent as total,
data_hit_ratio_percent as data, index_hit_ratio_percent as index
from sysibmadm.bp_hitratio
7.
db2 get snapshot for dbm
db2 get snapshot for database on zjbi2 | grep "Log pages"
db2 get database cfg for zjbi2|grep LOGBUFSZ
db2 get database cfg for zjbi2|grep DBHEAP
db2 get database cfg for zjbi2|grep LOCKTIMEOUT
db2 get database cfg for zjbi2|grep SORTHEAP
db2 get database cfg for zjbi2|grep MAXAPPLS
db2 get database cfg for zjbi2|grep MAXLOCKS
db2 get database cfg for zjbi2|grep LOCKLIST
db2 get database cfg for zjbi2|grep MAXAPPLS
db2 get database cfg for zjbi2|grep NUM_IO
db2 get database cfg for zjbi2|grep MINCOMMIT
8.(1) 计算锁列表大小的下限:(512 * 56 * 711) / 4096
(2) 计算锁列表大小的上限:(512 * 112 * 711) / 4096
9.
使用 rpm 命令来检验这些包是否已安装:
db2pd -osinfo 查看操作系统信息
10.手动查看格式化后的执行计划
db2 set current explain mode explain
db2 -tvf 123.sql
db2exfmt -1 -d zjbi2 -o db2exfmt1.out
仅收集数据:
db2expln -d sample -q "select * from employee" -t
db2 "select tbspaceid, tabname from syscat.tables where tabname='ACC_DEPS_CUR' "
db2 load query table DB2ADMIN.ACC_DEPS_CUR
db2 get snapshot for tables on <db_name>
db2 get snapshot for locks on <db_name>
db2 get snapshot for applications on <db_name>
11.
raid-0:至少需要两个以上盘,各盘同时读取,提高读取速率,速度快,但容错能力差
raid-1:要求能够同时对两个盘进行读操作和对两个镜像盘进行写操作,磁盘利用率只有50%,数据校验非常完备
当系统要求极高的可靠性时比较合适。
raid-5:磁盘分割技术。利用奇偶校验位回复数据,校验位分布在各个盘,至少需要3个独立硬盘,是raid-0和raid-1的折中。
容灾上限是一块硬盘,两块盘同时出现问题就会丢失数据,因此最好热备盘,即:将一块空盘加电空挂,不加入任何卷组,
任何一块盘出问题时代替其工作。
raid-10:先镜像在分割技术。至少4个盘。
"CREATE DATABASE MYDB AUTOMATIC STORAGE on D:\db2test\mydbpath001,D:\db2test\mydbpath002,D:\db2test\mydbpath003 AUTORESIZE YES
INITIALSIZE 100M INCREASESIZE 25M MAXSIZE none using codeset GBK " --此语句windows上不行
db2 "CREATE DATABASE mydb on D:\db2test USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM" --加路径不行
db2look -d sample -e -o sample.ddl -i lenovo -w cuinan -z lenovo
create TABLESPACE mytbs PAGESIZE 4K MANAGED BY database using ( file 'D:\dev\rlvdim_n00_01' 33M) --页大小要跟bp一样
alter TABLESPACE mytbs add ( file 'D:\dev\rlvdim_n00_02' 13M)
ALTER TABLESPACE TS1 EXTEND (ALL,10000) --所有容器扩展100页
ALTER TABLESPACE PAYROLL REDUCE (FILE 'd:\hldr\finance' 200) --缩小200页
ALTER TABLESPACE mytbs PERSNEEXTEND (FILE 'D:\dev\rlvdim_n00_02' 250 ) --windows上的扩展
alter tablespace mytbs switch offline
db2 create table xinzhuang_tab(id int NOT NULwith default 1)
在数据库中,当表中数据被删除时,空间并不会释放,而是在该行原来的位置做个“ DELETED ”的标志,表示该空间可以被重用。当 DB2 执行 INSERT 操作时,会扫描整个表的空闲空间并将新行置入空槽。
而如果我们启用了 append on 特性,那么当插入新行时,DB2 就不必搜索空槽再插入而是直接插入到表的最后
ALTER TABLE RECEIPTS PCTFREE 10 或
ALTER TABLE RECEIPTS PCTFREE 0 ----- 只读表
假如字段 name 的数据类型为 varchar(60),如果一开始 name 长度为 10 字节,
这时假设它刚好可以放到一个数据页中。但是假设有一个 update 操作将 name 从 10 字节更新为 60 字节,
如果这个数据页无法放下,那么数据库就在当前位置存放一个指针,
把数据放到一个新的页中,这就叫 overflow 。 overflow 会增加 I/O 的读取,对性能不好
alter table transaction_log volatile cardinality --- 设置银行交易流水表 volatile
这样一来,优化器将对启用 volatile 特性的表考虑使用索引扫描而不是表扫描,而无论统计信息如何。如果我们要处理的表的数据量是快速变化的,那么建议启用这个特性
清除卷的残留信息:
db2untag -f /dev/...
db2 "call admin_cmd('export to 2.del of del select * from dim_area_id')" --为何ixf的不行,del的可以执行
db2 load from haha.ixf of IXF insert into bi.cuirong_area_id
db2 "CALL ADMIN_CMD('LOAD FROM haha.del of del REPLACE INTO cuirong_area_id')"
admin_cmd 用法:
--首先建立一个结果集数组
--这里定义一个就够了,因为ADMIN_CMD的EXPORT操作返回值为1个result set,但是要注意别的操作有可能返回2个result set的,这时就需要定义2个了
declare loc1 result_set_locator varying;
--然后执行存储过程ADMIN_CMD
CALL SYSPROC.ADMIN_CMD ('EXPORT to /home/user1/data/myfile.ixf OF ixf MESSAGES ON SERVER select * from staff');
--然后调用该ADMIN_CMD返回结果集。
associate result set locator(loc1) with procedure ADMIN_CMD;
--将返回结果集和结果集数组关联
--再然后将结果集数组分配给cursor
allocate cursor1 cursor for result set loc1;
--下来就是操作游标的东东了
fetch cursor1 into ....--这里就不详细说了。。
--最后需要关闭游标
close cursor1;
EXPORT TO myfile.del OF DEL MODIFIED BY coldel0x1b codepage=1386 MESSAGES msg.out SELECT * FROM bi.dim_area_id