`
liuwentao
  • 浏览: 77978 次
  • 来自: 江西
社区版块
存档分类
最新评论

db2编程使用技巧二(转帖)

阅读更多

1.20 给select 语句指定隔离级别
select * from tb_head_stock_balance with ur
 
1.21 atomic及not atomic区别
atomic是将该部分程序块指定为一个整体,其中任何一个语句失败,则整个程序块都相当于没做,包括包含在atomic块内的已经执行成功的语句也相当于没做,有点类似于transaction。


2  DB2编程性能注意
2.1 大数据的导表
应该是export后再load性能更好,因为load不写日志。
比select into 要好。

2.2 SQL语句尽量写复杂SQL
   尽量使用大的复杂的SQL语句,将多而简单的语句组合成大的SQL语句对性能会有所改善。
   DB2的SQL Engieer对复杂语句的优化能力比较强,基本上不用当心语句的性能问题。
Oracle 则相反,推荐将复杂的语句简单化,SQL Engieer的优化能力不是特别好。
这是因为每一个SQL语句都会有reset SQLCODE和SQLSTATE等各种操作,会对数据库性能有所消耗。
一个总的思想就是尽量减少SQL语句的个数。
2.3 SQL  SP及C SP的选择
首先,C的sp的性能比sql 的sp 的要高。
一般而言,SQL语句比较复杂,而逻辑比较简单,sql sp 与 c sp 的性能差异会比较小,这样从工作量考虑,用SQL写比较好。
而如果逻辑比较复杂,SQL比较简单,用c写比较好。

2.4 查询的优化(HASH及RR_TO_RS)
db2set  DB2_HASH_JOIN=Y (HASH排序优化)
   指定排序时使用HASH排序,这样db2在表join时,先对各表做hash排序,再join,这样可以大大提高性能。
   剧沈刚说做实验,7个一千万条记录表的做join取10000条记录,再没有索引的情况下  72秒。

db2set  DB2_RR_TO_RS=Y       
 该设置后,不能定义RR隔离级别,如果定义RR,db2也会自动降为RS.
这样,db2不用管理Next key,可以少管理一些东西,这样可以提高性能。     


2.5 避免使用count(*) 及exists的方法
1、首先要避免使用count(*)操作,因为count(*)基本上要对表做全部扫描一遍,如果使用很多会导致很慢。
2、exists比count(*)要快,但总的来说也会对表做扫描,它只是碰到第一条符合的记录就停下来。

如果做这两中操作的目的是为
       select into 服务的话,就可以省略掉这两步。
直接使用select into 选择记录中的字段。

如果是没有记录选择到的话,db2 会将  sqlcode=100 和 sqlstate=’20000’
如果是有多条记录的话,db2会产生一个错误。

程序可以创建  continue handler for  exception 
              continue handler for  not found
来检测。
这是最快速的方法。

3、如果是判断是不是一条,可以使用游标来计算,用一个计数器,累加,达到预定值后就离开。这个速度也比count(*) 要快,因为它只要扫描到预定值就不再扫描了,不用做全表的scan,不过它写起来比较麻烦。


3 DB2表及sp管理
3.1 看存储过程文本
select text from syscat.procedures where procname='PROC1';
3.2 看表结构
describe table syscat.procedures
describe select * from syscat.procedures

3.3 查看各表对sp的影响(被哪些sp使用)
select PROCNAME from SYSCAT.PROCEDURES where SPECIFICNAME in(select dname from sysibm.sysdependencies where bname in ( select PKGNAME  from syscat.packagedep where bname='TB_BRANCH'))

3.4 查看sp使用了哪些表
select bname from syscat.packagedep where btype='T' and pkgname in(select bname from sysibm.sysdependencies where dname in (select specificname from syscat.procedures where procname='PR_CLEAR_MATCH_DIVIDE_SHA'))
3.5 查看function被哪些sp使用
select PROCNAME from SYSCAT.PROCEDURES where SPECIFICNAME in(select dname from sysibm.sysdependencies where bname in ( select PKGNAME  from syscat.packagedep where bname   in  (select SPECIFICNAME from SYSCAT.functions where funcname='GET_CURRENT_DATE')))


使用function时要注意,如果想drop 掉该function必须要先将调用该function的其它存储过程全部drop掉。
必须先创建function,调用该function的sp才可以创建成功。
3.6 修改表结构
一次给一个表增加多个字段
db2 "alter table tb_test add column t1 char(1) add column t2 char(2) add column t3 int"


4 DB2系统管理
4.1 DB2安装
  在Windows 98 下安装db2 7.1 或其他版本,如果有Jdbc错误或者是Windwos 98不能启动,则将autoexec.bat 中的内容用如下内容替换:


C:\PROGRA~1\TRENDP~1\PCSCAN.EXE C:\ C:\WINDOWS\COMMAND\ /NS /WIN95 
rem C:\WINDOWS\COMMAND.COM /E:32768
REM [Header]

REM [CD-ROM Drive]

REM [Miscellaneous]

REM [Display]

set PATH=%PATH%;C:\MSSQL\BINN;C:\PROGRA~1\SQLLIB\BIN;C:\PROGRA~1\SQLLIB\FUNCTION;C:\PROGRA~1\SQLLIB\SAMPLES\REPL;C:\PROGRA~1\SQLLIB\HELP
IF EXIST C:\PROGRA~1\IBM\IMNNQ\IMQENV.BAT CALL C:\PROGRA~1\IBM\IMNNQ\IMQENV.BAT
IF EXIST C:\PROGRA~1\IBM\IMNNQ\IMNENV.BAT CALL C:\PROGRA~1\IBM\IMNNQ\IMNENV.BAT
set DB2INSTANCE=DB2
set CLASSPATH=.;C:\PROGRA~1\SQLLIB\java\db2java.zip;C:\PROGRA~1\SQLLIB\java\runtime.zip;C:\PROGRA~1\SQLLIB\java\sqlj.zip;C:\PROGRA~1\SQLLIB\bin
set MDIS_PROFILE=C:\PROGRA~1\SQLLIB\METADATA\PROFILES
set LC_ALL=ZH_CN
set INCLUDE=C:\PROGRA~1\SQLLIB\INCLUDE;C:\PROGRA~1\SQLLIB\LIB;C:\PROGRA~1\SQLLIB\TEMPLATES\INCLUDE
set LIB=C:\PROGRA~1\SQLLIB\LIB
set DB2PATH=C:\PROGRA~1\SQLLIB
set DB2TEMPDIR=C:\PROGRA~1\SQLLIB
set VWS_TEMPLATES=C:\PROGRA~1\SQLLIB\TEMPLATES
set VWS_LOGGING=C:\PROGRA~1\SQLLIB\LOGGING
set VWSPATH=C:\PROGRA~1\SQLLIB
set VWS_FOLDER=IBM DB2
set ICM_FOLDER=信息目录管理器

win


4.2 创建Database
create database head using codeset IBM-eucCN territory CN;
这样可以支持中文。


4.3 手工做数据库远程(别名)配置
db2  catalog tcpip  node   node1  remote   172.28.200.200 server  50000
db2  catalog db    head   as     test1 at  node   node1

然后既可使用:

db2 connect to test1  user …  using …
连上head库了

4.4 停止启动数据库实例
db2start
db2stop (force)


4.5 连接数据库及看当前连接数据库
连接数据库
db2  connect to head user db2inst1  using db2inst1

当前连接数据库
db2  connect
4.6 停止启动数据库head
db2  activate  db  head
db2  deactivate db  head
要注意的是,如果有连接,使用deactivate db 不起作用。
如果是用activate db启动的数据库,一定要用deactivate db才会停止该数据库。(当然如果是db2stop也会停止)。
使用activate db,这样可以减少第一次连接时的等待时间。
Database如果不是使用activate db启动而是通过连接数据库而启动的话,当所有的连接都退出后,db也就自动停止。

4.7 查看及停止数据库当前的应用程序
查看应用程序:
db2   list   applications  show  detail 

授权标识 | 应用程序名 | 应用程序句柄 |  应用程序标识 | 序号#  | 代理程序 |  协调程序 | 状态 |  状态更改时间 |  DB 名 | DB 路径|                                                      |    节点号 |   pid/线程

其中:1、应用程序标识的第一部分是应用程序的IP地址,不过是已16进制表示的。
2、pid/线程即是在unix下看到的线程号。

停止应用程序:
db2 "force application(236)"
db2 “force application all”

其中:该236是查看中的应用程序句柄。


4.8 查看本instance下有哪些database
db2 LIST DATABASE DIRECTORY  [ on /home/db2inst1 ]
4.9 查看及更改数据库head的配置
请注意,在大多数情况下,更改了数据的配置后,只有在所有的连接全部断掉后才会生效。

查看数据库head的配制
db2 get db cfg for head


更改数据库head的某个设置的值
4.9.1 改排序堆的大小
db2 update db cfg for head using SORTHEAP 2048
将排序堆的大小改为2048个页面,查询比较多的应用最好将该值设置比较大一些。
4.9.2 改事物日志的大小
db2 update db cfg for head using  logfilsiz  40000
该项内容的大小要和数据库的事物处理相适应,如果事物比较大,应该要将该值改大一点。否则很容易处理日志文件满的错误。

4.9.3 出现程序堆内存不足时修改程序堆内存大小
db2 update db cfg for head using  applheapsz  40000
该值不能太小,否则会没有足够的内存来运行应用程序。

4.10 查看及更改数据库实例的配置
查看数据库实例配置
db2  get dbm cfg 
更改数据库实例配制

4.10.1 打开对锁定情况的监控。
db2 update dbm cfg using dft_mon_lock  on
4.10.2 更改诊断错误捕捉级别

db2 update dbm cfg using diaglevel 3
0 为不记录信息
1 为仅记录错误
2 记录服务和非服务错误
缺省是3,记录db2的错误和警告
4 是记录全部信息,包括成功执行的信息
一般情况下,请不要用4,会造成db2的运行速度非常慢。

4.11 db2环境变量
db2 重装后用如下方式设置db2的环境变量,以保证sp可编译
将set_cpl 放到AIX上, chmod +x set_cpl, 再运行之

set_cpl的内容
db2set DB2_SQLROUTINE_COMPILE_COMMAND="xlc_r  -g \
-I$HOME/sqllib/include SQLROUTINE_FILENAME.c \
-bE:SQLROUTINE_FILENAME.exp -e SQLROUTINE_ENTRY \
-o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2"

db2set DB2_SQLROUTINE_KEEP_FILES=1
4.12 db2命令环境设置
db2=>list command options
db2=>update command options using C off--或on,只是临时改变
db2=>db2set db2options=+c --或-c,永久改变

4.13 改变隔离级别
DB2SET DB2_SQLROUTINE_PREPOPTS=CS|RR|RS|UR

交互环境更改session的隔离级别,
       db2 change isolation  to UR
请注意只有没有连接数据库时可以这样来改变隔离级别。

4.14 管理db\instance的参数
get db cfg for head(db)
get dbm cfg(instance)

4.15 升级后消除版本问题
db2   bind  @db2ubind.lst
db2   bind   @db2cli.lst

4.16 查看数据库表的死锁
再用命令中心查询数据时要注意,如果用了交互式查询数据,命令中心将会给所查的记录加了s锁.这时如果要update记录,由于update要使用x锁,排它锁,将会处于锁等待.

首先,将监视开关打开
db2 update dbm cfg using dft_mon_lock  on
快照
  db2 get snapshot for  Locks  on  cleardb   >snap.log
                    tables 
bufferpools
tablespaces
database
   然后再看snap.log中的内容即可。
对Lock可根据Application handle(应用程序句柄)看每个应用程序的锁的情况。
 监视完毕后,不要忘了将监视器关闭
     db2 update dbm cfg using dft_mon_lock  off

分享到:
评论

相关推荐

    编程(db2)使用技巧

    根据给定的文件信息,以下是对“编程(db2)使用技巧”的详细知识点解析: ### 1. DB2编程基础 #### 1.1 创建表(Create Table) 在DB2中创建表是一个基本操作,用于定义数据存储结构。创建表时,需要指定列名、数据...

    DB2编程技巧与实用技术

    DB2编程技巧与实用技术是数据库管理领域的重要一环,特别是在处理复杂的业务逻辑和性能调优时显得尤为重要。本文将详细解析几个关键的DB2编程技术。 首先,创建存储过程时,需要注意SQL语句的格式。在使用`CREATE ...

    db2编程技巧

    ### DB2编程技巧详解 #### 一、DB2基本操作 **1.1 创建表 (Create Table)** 在DB2中创建表时,通常使用`CREATE TABLE`语句。例如: ``` CREATE TABLE tb_market_code ( market_code CHAR(10), -- 其他字段定义 ...

    DB2 编程技巧开发笔记

    这篇"DB2编程技巧开发笔记"涵盖了多个关键领域,旨在帮助开发者和管理员提升在DB2环境中的工作效率和技能。以下是对这些知识点的详细解释: 1. **DB2命令**:DB2提供了一系列的命令行工具,用于执行数据库操作,如`...

    DB2编程序技巧

    db2 开发中常用技巧

    DB2编程基础DB2编程基础DB2编程基础

    在DB2编程中,理解并熟练掌握这些基础概念和技巧至关重要,它们能帮助开发者编写出高效、稳定的数据库应用程序。除此之外,还要注意SQL标准的遵循,避免与特定数据库系统的语法差异带来的问题,并确保代码的可移植性...

    db2使用技巧

    DB2 使用技巧总结 DB2 是 IBM 公司开发的一种关系数据库管理系统,广泛应用于企业级数据库管理。以下是 DB2 使用技巧的总结,涵盖了字符串连接、数据删除、数据导入导出、表检查、锁表问题、存储过程、索引检查、...

    DB2编程基础要点 sql 存储过程

    DB2编程基础要点主要涉及SQL语句的使用和存储过程的创建。在DB2数据库管理系统中,编程工作是一项核心任务,对于数据的增删改查和处理流程的自动化至关重要。 首先,创建存储过程时,必须注意语法的严谨性。在使用`...

    db2使用14个经典小技巧

    在日常使用DB2时,掌握一些实用的技巧能够显著提升工作效率。以下是14个DB2使用的小技巧: 1. **查看本地节点目录**:在命令行输入 `db2 list node directory`,这将显示已注册的所有本地节点信息。 2. **编目TCP/...

    DB2编程及SQL指南

    它不仅覆盖了静态SQL编程的基础知识,还深入探讨了动态SQL编程的相关技巧,并提供了丰富的实例代码供读者学习和参考。 #### 二、目标读者群体 本书适合以下几类人群阅读: - DB2数据库管理员:了解如何更高效地...

    java连接DB2数据库编程简介

    Java连接DB2数据库编程是Java开发中的一项重要技能,尤其在企业级应用中,数据库的交互通常是必不可少的。本篇文章将深入探讨如何使用Java来连接并操作DB2数据库,包括基本的连接步骤、所需的库以及实用示例。 首先...

    IBM DB2 数据库使用小技巧

    ### IBM DB2 数据库使用小技巧详解 IBM DB2 是一款功能强大的企业级数据库管理系统,广泛应用于各种商业和工业环境中。对于DB2的使用者来说,掌握一些常用命令和技巧是提高工作效率的关键。以下是对给定文件中提到...

    DB2使用手册

    * DB2 支持多种编程语言,包括 SQL、Java、Python 等。 二、DB2 安装和配置 * 安装 DB2 需要满足一定的硬件和软件要求。 * DB2 安装完成后,需要进行配置,包括设置数据库实例、配置连接参数等。 三、DB2 使用 *...

    十大DB2优化技巧

    【DB2优化技巧详解】 DB2数据库管理系统是IBM公司的一款高效、可靠的企业级数据库解决方案,广泛应用于各种在线交易处理(OLTP)和电子商务系统。针对DB2的性能优化至关重要,以下是一些关键的优化技巧,旨在提升DB2...

    .net连接DB2数据库编程简介

    本文将详细介绍如何使用.NET Framework和IBM Data Provider for .NET来实现这一目标,以及相关的编程概念和示例。 首先,理解.NET Framework是Microsoft开发的用于构建、部署和运行应用程序的平台,而DB2则是IBM...

    关于DB2的实用技巧

    掌握DB2的实用技巧对于数据库管理员和开发人员来说至关重要。本篇将深入探讨DB2的一些关键特性和实用技巧,帮助你更高效地操作和管理DB2数据库。 1. **SQL优化** - 使用`EXPLAIN PLAN`来分析查询执行计划,了解...

    DB2资料-DB2的使用经验-作者牛新庄

    在牛新庄的DB2使用经验分享中,我们能够深入了解到DB2的一些核心概念和编程技巧。 首先,让我们来详细解析一下DB2中的几个重要专有名词: 1. INSTANCE(实例):在DB2中,一个实例是数据库管理系统运行的环境,它...

    DB2 技巧.doc

    DB2技巧文档主要涵盖了数据导入导出、性能调整、字符集、参数调整以及常见问题的解决方案,这些都是DB2数据库管理中的关键环节。 一、数据的导入导出 数据的导入导出是数据库管理中的基础操作,DB2提供了多种工具如...

Global site tag (gtag.js) - Google Analytics