当前位置:文档之家› DB2性能优化

DB2性能优化

DB2存储过程快速入门.

1.1 SQL过程的结构 命名规则: 1、清洗过程名称命名: PROC_业务主题_目标表(PROC_JY_KJYRLJB 交易主题的卡交易日类聚表) 2、函数名称命名: PROC_业务主题_函数名(PROC_JY_GETYWZL 交易主题取得卡业务种类函数) 3、变量命名: VAR_变量描述(VAR_YWZL 业务种类变量) 4、游标命名: CUR_游标描述(CUR_KJYB 对卡交易表进行游标处理) 语法: CREATE PROCEDURE 过程名称 (参数列表 DYNAMIC RESULT SETS 结果集数量 是否允许SQL LANGUAGE SQL BEGIN SQL 过程体

END 范例“资产负债.sql ”中 第1行:Create Procedure admin.BalanceSheetDayly定义了过程名称 参数列表为Out ProcState varchar(100 其定义SQL 过程从客户应用获取,或返回客户应用的0个或多个参数,参数列表使用逗号侵害各个参数 参数类型有三种: l IN 从客户应用检索值。其不能够在SQL 过程体中修改 l OUT 向客户应用返回值 l INOUT 从客户应用检索值,并返回值 省略了结果集数量的定义,default 为0。即表示不返回结果集。 省略了是否允许SQL 的说明。其值指出了存储过程是否会使用SQL 语句,如果使用,其类型如何: l NO SQL 不能够执行任何SQL 语句 l COTAINS SQL 可以执行不会读取SQL 数据,也不会修改SQL 数据的SQL 语句 l READS SQL DATA 可以包含不会修改SQL 数据的SQL 语句 l MODIFIES SQL DATA 可以执行任何SQL 语句,除了不能够在存储过程中支持的语句以外。

DB2数据库日常维护-REORG_TABLE

转)DB2日常维护——REORG TABLE命令优化数据库性能 2009-04-24 16:18 一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常、安全、高效运行,防止一些错误重复发生。 由于DB2使用CBO作为数据库的优化器,数据库对象的状态信息对数据库使用合理的 ACCESS PLAN至关重要。DB2 优化器使用目录统计信息来确定任何给定查询的最佳访问方案。如果有关表或索引的统计信息已过时或者不完整,则会导致优化器选择不是最佳的方案,并且会降低执行查询的速度。当数据库里某个表中的记录变化量很大时,需要在表上做REORG操作来优化数据库性能 一、完整的REORG表的过程 值得注意的是,针对数据库对象的大量操作,如反复地删除表,存储过程,会引起系统表中数据的频繁改变,在这种情况下,也要考虑对系统表进行REORG 操作。一个完整的REORG表的过程应该是由下面的步骤组成的: RUNSTATS -> REORGCHK -> REORG -> RUNSTATS -> BIND或REBIND 注:执行下面命令前要先连接数据库 1 RUNSTATS 由于在第二步中REORGCHK时可以对指定的表进行RUNSTATS操作(在REORGCHK时指定UPDATE STATISTICS),所以第一步事实上是可以省略的。 2 REORGCHK 在对表数据进行许多更改之后,逻辑上连续的数据可能会位于不连续的物理数据页上,在许多插入操作创建了溢出记录时尤其如此。按这种方式组织数据时,数据库管理器必须执行其他读操作才能访问顺序数据。另外,在删除大量行后,也需要执行其他的读操作。 表重组操作会整理数据碎片来减少浪费的空间,并对行进行重新排序以合并溢出记录,从而加快数据访问速度并最终提高查询性能。还可以指定根据特定索引来重新排序数据,以便查询时通过最少次数据读取操作就可以访问数据。 下列任何因素都可能指示用户应该重组表: 1)自上次重组表之后,对该表进行了大量的插入、更新和删除活动。

DB2 MDC 表的优化策略

DB2 MDC 表的优化策略 如果创建多维集群 (MDC) 表,那么可以提高许多查询的性能,这是因为优化器可 以应用附加的优化策略。这些策略主要依赖于块索引效率有所提高,但根据多个维进行集群这一优点还能提高数据检索速度。 MDC 表优化策略还可以利用分区内并行性和分区间并行性的性能优点。请考虑MDC 表的下列具体优点: ?维块索引查找操作可以标识表的所需部分,并且能够快速地仅扫描所需的块。 ?因为块索引小于记录标识(RID)索引,所以查找速度更快。 ?可以在块级别执行索引 AND 和 OR 运算,并可以将这些运算与 RID 相结合。 ?保证在扩展数据块内集群数据,这有助于提高检索速度。 ?如果可以使用转出方法,那么删除行的速度将更快。 请考虑名为 SALES 的 MDC 表的以下简单示例,这个表对 REGION 和 MONTH 列 定义了维: select * from sales where month = 'March' and region = 'SE' 对于此查询,优化器可以执行维块索引查找操作,以寻找月份为三月且地区为 SE 的块。然后,它可以只扫描那些块,以便快速地访存结果集。 转出删除 当条件允许使用转出方法来进行删除时,将使用这种从 MDC 表中删除行的更高效 方法。必需的条件包括: ?该 DELETE 语句是搜索型 DELETE,而不是定位型 DELETE(该语句不使用 WHERE CURRENT OF 子句)。 ?没有 WHERE 子句(将删除所有行),或者 WHERE 子句只包含应用于维的条件。 ?定义表时,未指定 DATA CAPTURE CHANGES 子句。 ?该表不是引用完整性关系中的父表。 ?未对该表定义 ON DELETE 触发器。 ?未在任何立即刷新的 MQT 中使用该表。 ?如果级联删除操作的外键是该表的维列的子集,那么它可能适合于转出。 ?在由 CREATE TRIGGER 语句的 OLD TABLE AS 子句指定的触发 SQL 操作之前,该 DELETE 语句不能出现在对临时表执行并标识了受影响行集的 SELECT 语句中。

db2数据库性能参数优化笔记整理

[经验分享] db2数据库性能参数优化笔记整理 数据库, 笔记, 性能, 参数, 调优 1、Application Support Layer Heap Size (ASLHEAPSZ) 它是app和agent通信的buffer,占用实例共享内存空间。 监控: get snapshot for all on | grep –i “Rejected Block Remote Cursor requests” Rejected Block Remote Cursor requests = 2283 如果Rejected Block Remote Cursor requests值比较高,增大ASLHEAPSZ值,直到该值为0 配置: update dbm cfg using aslheapsz 20 2、Maximum Requester I/O Block Size (RQRIOBLK) 它是client和server通信的buffer,占用每个agent的私有内存空间。 监控:无法监控 配置:建议设置为最大值64K,缺省32767bytes,(设到最大值不会影响其它性能) update dbm cfg using rqrioblk 65536 3、Sort Heap Threshold (SHEAPTHRES) 私有模式排序空间最大阀值,值=并发数×SORTHEAP 监控: 需要打开sort监控开关-db2 update monitor switches using sort on get snapshot for dbm | grep –i “sort” 如果Post threshold sorts值比较大,增加SORTHEAP 、SHEAPTHRES参数值 如果(Piped sorts accepted/Piped sorts requested)值比较低,增加SORTHEAP 、SHEAPTHRES参数值配置: update dbm cfg using sheapthres 80000 4、Enable Intra-Partition Parallelism (INTRA_PARALLEL) 在SMP环境中打开该选项,提高表和索引扫描速度 监控: list applications 看application对应的Agents(# of Agents)数目是否大于1 配置: update dbm cfg using intra_parallel yes 5、Maximum Query Degree of Parallelism (MAX_QUERYDEGREE)

DB2存储过程学习总结

Db2 存储过程学习总结 ●在命令窗口执行存储过程,可以方便看出存储过程在哪一行出现错误,方便修改。 ●db2 存储过程常用语句格式 ----定义 DECLARE CC VARCHAR(4000); DECLARE SQLSTR VARCHAR(4000); DECLARE st STATEMENT; DECLARE CUR CURSOR WITH RETURN TO CLIENT FOR CC; ----执行动态SQL不返回 PREPARE st FROM SQLSTR; EXECUTE st; ----执行动态SQL返回 PREPARE CC FROM SQLSTR; OPEN CUR; ----判断是否为空,使用值替代 COALESCE(判断对象,替代值)

----定义临时表 DECLARE GLOBAL TEMPORARY TABLE SESSION.TempResultTable ( Organization int, OrganizationName varchar(100), AnimalTypeName varchar(20), ProcessType int, OperatorName varchar(100), OperateCount int ) WITH REPLACE -- 如果存在此临时表,则替换 NOT LOGGED; DB2 9.x临时表使用总结 1). DB2的临时表需要用命令Declare Temporary Table来创建,并且需要创建在用户临时表空间上; 2). DB2在数据库创建时,缺省并不创建用户临时表空间,如果需要使用临时表,则需要用户在创建临时表之前创建用户临时表空间; 3). 临时表的模式为SESSION,SESSION即基于会话的,且在会话之间是隔离的。当会话结束时,临时表的数据被删除,临时表被隐式卸下。对临时表的定义不会在SYSCAT.TABLES中出现 .; 4). 缺省情况下,在Commit命令执行时,DB2临时表中的所有记录将被删除; 这可以通过创建临时表时指定不同的参数来控制; 5). 运行ROLLBACK命令时,用户临时表将被删除; 下面是DB2临时表定义的一个示例: DECLARE GLOBAL TEMPORARY TABLE results ( RECID VARCHAR(32) , --id XXLY VARCHAR(100), --信息来源 LXDH VARCHAR(32 ), --信息来源联系电话 FKRQ DATE --反馈时间 ) ON COMMIT PRESERVE ROWS WITH REPLACE NOT LOGGED; ----字符串函数

DB2存储过程简单例子

DB2存储过程简单例子 客户在进行短信服务这个业务申请时,需要填写一些基本信息,然后根据这些信息判断这个用户是否已经存在于业务系统中。因为网上服务和业务系统两个项目物理隔离,而且网上数据库保存的客户信息不全,所以判断需要把数据交换到业务系统,在业务系统中判断。 解决方式是通过存储过程,以前也了解过存储过程,但没使用到项目中。不过经过一番努力最后还是完成了,期间遇到了一些困难,特写此文让对DB2存储过程还不熟悉的童鞋避免一些无谓的错误。 DROP PROCEDURE "PLName" @ CREATE PROCEDURE "PLName"(--存储过程名字 IN IN_ID BIGINT , --以下全是输入参数 IN IN_ENTNAME VARCHAR(200) , IN IN_REGNO VARCHAR(50), IN IN_PASSWORD VARCHAR(20), IN IN_LEREP VARCHAR(300), IN IN_CERTYPE CHARACTER(1), IN IN_CERNO VARCHAR(50), IN IN_LINKMAN VARCHAR(50), IN IN_SEX CHARACTER(1), IN IN_MOBTEL VARCHAR(30), IN IN_REQDATE TIMESTAMP, IN IN_REMITEM VARCHAR(300), IN IN_STATE CHARACTER(1), IN IN_TIMESTAMP TIMESTAMP ) BEGIN declare V_RESULT BIGINT; --声明变量 DELETE FROM TableNameA WHERE ID = IN_ID;

DB2数据库优化

关于数据库优化有很多方法,这里针对数据库的runstat(运行统计)和reorg(重组)进行以下说明; 一、runstats: 1、runstats的作用: 一个SQL在写完并运行之后,其实我们只是告诉了DB2去做什么,而不是如何去做。而,具体的如何去做,就取决于优化器。优化器为了生成最优的执行计划,就得掌握当前的系统信息,目录中的统计信息等等。 runstats命令就是用来收集数据库对象的状态信息,这对优化器生成最优的执行计划至关重要。 2、什么时候需要runstats: 在给表创建一个index后,我们最好做一次runstat,否则可能index没有生效。不过有说法称在8.2版本以后的DB2中,会在INDEX之后自动进行runstats; 在对table做了一次reorg后,记得要做一次runstats。因为对表做reorg,会修改表的很多信息,比如高水位等,所以做一次runstats,可以更新统计信息。 当表里数据发生了比较大的变化,一般来说,大约表里面的数据量的10%-20%发生了变化,就应该作一次runstats。这些变化包括删除,修改,插入。对于一些非常大的表,比方在某些医院,出院明细账表非常巨大。这个时候,完整的对一个大表做runstats可能花费时间相当大,需要提前做好准备; 3、runstats的语法: runstats on table [模式名].[表名] with distribution and detailed indexes all 你可以在所有列上,或者仅仅在某些列或列组(除了LONG和LOB列)上执行RUNSTA TS。如果没有指定特定列的子句,系统则会使用默认的ON ALL COLUMNS子句。 使用RUNSTA TS WITH DISTRIBUTION 当您已确定表中包含不是统一分布的数据时,可以运行包含WITH DISTRIBUTION子句的RUNSTA TS。目录统计信息表通常包含关于表中最高和最低值的信息,而优化器假定数据值是在两个端点值之间均匀分布的。然而,如果数据值彼此之间差异较大,或者群集在某些点上,或者是碰到许多重复的数据值,那么优化器就无法选择一个最佳的访问路径,除非收集了分布统计信息。使用WITH DISTRIBUTION子句还可以帮助查询处理没有参数标志符(parameter marker)或主机变量的谓词,因为优化器仍然不知道运行时的值是有许多行,还是只有少数行。 如果为单一索引进行runstats,可以使用: runstats on table [模式名].[表名] for indexes [索引名] 4、图像界面下runstats; 首先在维护机上编目需要优化的的数据库; 连接数据库; 找到需要做runstats的表,右键,选择运行统计信息;

db2对缓冲池的性能优化

db2 对缓冲池的性能优化 博客分类: DB2 db2 对缓冲池的性能优化 需求:因为项目开始的时候没有对DB2数据库进行深入的熟悉,所以造成项目后期做性能测试的时候,导致应用访问过慢,后来决定从数据方面做做一下性能优化,主要在于缓冲池方面。 解决方案:因为数据库中只有一个常规表空间表空间USERSPACE1和一个缓冲池 IBMDEFAULTDP(1G),所以决定重新再建一个大的缓冲池BP2,将USERSPACE1赋给BP2 CREATE BUFFERPOOL BP2 SIZE 2048 PAGESIZE 4K; ALTER TABLESPACE USERSPACE1 BUFFERPOOL BP2; 附注: 以下为对网上资源学习后的一个总结: 1、表空间 I、数据存储层级关系:数据库-->表空间-->容器-->表, II、表空间分类: 目录表空间 特性:每个数据库只有一个目录表空间,它是在发出CREATE DATABASE 命令时创建的. 目录表空间被DB2 命名为SYSCATSPACE, 用途:它保存了系统目录表; 常规表空间

特性:创建数据库时指定该表空间的缺省名为USERSPACE1。长表空间是可选的,缺省情况下一个都不创建, 用途:保存表数据和索引、还可以保存LOB之类的长数据; 系统临时表空间 特性:随数据库创建的系统临时表空间的缺省名为TEMPSPACE1, 用途:用于存储SQL 操作(比如排序、重组表、创建索引和连接表)期间所需的内部临时数据; 以上是由系统管理的空间(SMS),必须有一个 以下是由数据库管理的空间(DMS),可选 长表空间 用途:用于存储长型或LOB 表列,存储结构化类型的列或索引数据 用户临时表空间 用途:存储已声明的全局临时表 LOB(large object)的定义: 是一种用于存储大对象的数据类型,如医学记录(如X-射线)、视频、图像等。LOB有三种类型:BLOB:Binary Large Object、 CLOB:Character Large Object、DBCLOB:Double-byte Character Large Object。每个LOB可以有2GB III、页大小(暂无): IIII、创建表空间: 最有效的表空间设置属性:PAGESIZE(表空间大小)、EXTENTSIZE(将数据写入到下一个容器之前写入到当前容器中的数据的页数)和PREFETCHSIZE(预取)

DB2数据库性能优化

DB2数据库性能优化 DB2问世于1983年,其被贴上的标签之一就是:最早使用SQL(同样最早被IBM 开发)的关系型数据库产品。此前,IBM已经有了一个层次性数据库产品,在当时已属数据库中的"大哥大",所以当发布关系型数据库时,IBM为自己的数据库产品排座次,新的数据库产品理所当然的是数据库二代,也被大家戏称为"库二代",就这样,DB2的命名也就被人们接受了。实际上,DB2的渊源可以追溯至上世纪70年代初,那时还是个登月的年代,阿波罗登月的壮举时刻激励科学家们开拓创新。当时在IBM工作的考德(E.F.Codd)博士在1970年6月用划时代的论文描述了关系型数据库理论,这使得后来诞生的"库二代"被赋予了强有力的数学基础和逻辑基因。接下来,IBM把对E.F.Codd想法的实施交给了一个程序小组,这个程序小组使用SEQUEL作为查询语言。当IBM公布其第一个关系型数据库产品时,对SEQUEL重新命名,这就是后来大名鼎鼎的SQL。而在那一段时间,刚遭受离婚重创的犹太人Larry Ellision也发现了其中的秘密,他创立的Oracle,着实与DB2经历了一起"穿开裆裤"的起步阶段,之后你追我干30年,成为一组最有趣的竞争对手。 在上世纪80年代,DB2作为一个全功能的数据库管理系统,被IBM大型机所专用。到了上世纪90年代早期,IBM将DB2带向了其它平台,包括OS/2、UNIX以及Windows服务器,然后是Linux和手持设备。让大家一目了然的是,DB2 所有的产品都要被命名为"产品 for 平台"(例如,DB2 for OS/390)。 进入上世纪90年代中期,IBM发布了一组最初应用在AIX上的被称为DB2 Parallel的版本,此版本通过无分享(Share Nothing)架构而提供更强的伸缩性,即将一个大型数据库,分布到多个服务器上。后来,这个DB2版本被扩展到所有的Linux、UNIX以及Windows平台,并被重新命名为DB2 Extended Enterprise Edition(EEE)。现在,这个特性被称为Database Partitioning Feature(DPF)。目前,DPF在数据仓库中已得到了广泛应用。 DB2有众多的版本,除了支持OLTP的Express、Workgroup和Enterprise等版本外,还提供了支持数据仓库的版本,Infosphere Wareshouse(缩写为ISW)。这个版本偏重于混合工作负荷(OLTP和OLAP)和商业智能的实现,包含一些商务智能的特性例如ETL工具、数据发掘、OLAP加速等。 DB2 V10是最近发布的版本。这个版本提供了多时态表(Temporal Tables)、多表星型连接、行列访问控制(RCAC)、多温度存储(Multi-temperature Storage)等特性;在DB2 V10中,通过自适应压缩(Adaptive Compression)特性大幅度提升了压缩比;DB2集群技术(pureScale)得到进一步的完善。 本课程循序渐进,由浅入深,从DB2基础讲起,再深入讲授性能调优方法学和核心技能,最后会分享培训老师在一线多年的实战案例。内容包括:DB2优化方法系统、数据库监控、配置参数调整、日志优化、运维工具优化、锁机制、索引调优、优化器与SQL语句调优等。另外,最最重要的是本课程包含众多一线实战案例,包括某ERP数据库性能优化、某数据采集平台数据库性能优化等。

DB2存储过程--基础详解

DB2存储过程-基础详解 2010-12-20 来源:网络 简介 DB2 SQL Procedural Language(SQL PL)是SQL Persistent Stored Module 语言标准的一个子集。该标准结合了SQL 访问数据的方便性和编程语言的流控制。通过SQL PL 当前的语句集合和语言特性,可以用SQL 开发综合的、高级的程序,例如函数、存储过程和触发器。这样便可以将业务逻辑封装到易于维护的数据库对象中,从而提高数据库应用程序的性能。 SQL PL 支持本地和全局变量,包括声明和赋值,还支持条件语句和迭代语句、控制语句的转移、错误管理语句以及返回结果集的方法。这些话题将在本教程中讨论。 变量声明 SQL 过程允许使用本地变量赋予和获取SQL 值,以支持所有SQL 逻辑。在SQL 过程中,在代码中使用本地变量之前要先进行声明。 清单 1 中的图演示了变量声明的语法: 清单 1. 变量声明的语法 .-,-----------------. V | |--DECLARE----SQL-variable-name-+-------------------------------> .-DEFAULT NULL------. >--+-data-type--+-------------------+-+-------------------------| | '-DEFAULT--constant-' | SQL-variable-name 定义本地变量的名称。该名称不能与其他变量或参数名称相同,也不能与列名相同。 图 1 显示了受支持的DB2 数据类型:

DB2性能监控和调优(Bufferpool篇)

1,打开监视器记录开关 >db2 update monitor switches using BUFFERPOOL ON 2,查看BUFFERPOOL相关指标 >db2 connect to BANK >db2 get snapshot for BUFFERPOOLS on BANK ... Buffer pool data logical reads = 16359 Buffer pool data physical reads = 209 Buffer pool index logical reads = 90 Buffer pool index physical reads = 52 ... buffer pool hit ratio = (1- ((Buffer pool data physical reads + Buffer pool index physical reads) / (Buffer pool data logical reads + Buffer pool index logical reads))) * 100% 3,查看BUFFERPOOL大小 >db2 connect to BANK >db2 "select BPNAME,NPAGES,PAGESIZE from SYSCAT.BUFFERPOOLS" BPNAME NPAGES PAGESIZE ------------------------------------------------------------------------- ------------------------------------------------ ----------- ----------- IBMDEFAULTBP 250 4096 1 条记录已选择。 看到,250 pages,每页4096 bytes(4k) 4,运行performer,记录Test Result 5,打开Windows任务管理器,注意当前内存使用情况 6,加大IBMDEFAULTBP >db2 "alter bufferpool IBMDEFAULTBP immediate size 10000" 7,注意Windows任务管理器显示的当前内存使用情况 8,运行performer,记录Test Result,与调整前比较。

DB2 存储过程开发最佳实践

DB2 存储过程开发最佳实践 COALESCE函数会依次检查输入的参数,返回第一个不是NULL的参数,只有当传入COALESCE函数的所有的参数都是NULL的时候,函数才会返回NULL。例如, COALESCE(piName,''),如果变量piName为NULL,那么函数会返回'',否则就会返回piName本身的值。 下面的例子展示了如何对参数进行检查何初始化。 Person表用来存储个人的基本信息,其定义如下: 表1: Person 下面是用于向表Person插入数据的存储过程的参数预处理部分代码:

表Person中num、name和age都是非空字段。对于name字段,多个空格我们也认为是空值,所以在进行判断前我们调用RTRIM和COALESCE对其进行处理,然后使用 piName = '',对其进行非空判断;对于Rank 字段,我们希望如果用户输入的NULL,我们把它设置成"0",对其我们也使用COALESCE进行初始化;对于"Age"和"Num" 我们直接使用 IS NULL进行非空判断就可以了。 如果输入参数没有通过非空判断,我们就对输出参数poGenStatus设置一个确定的值(例子中为 34100)告知调用者:输入参数错误。 下面是对参数初始化规则的一个总结,供大家参考: 1. 输入参数为字符类型,且允许为空的,可以使用COALESCE(inputParameter,'')把NULL转换成''; 2. 输入类型为整型,且允许为空的,可以使用COALESCE(inputParameter,0),把空转换成0; 3. 输入参数为字符类型,且是非空非空格的,可以使用COALESCE(inputParameter,'')把NULL转换成'',然后判断函数返回值是否为''; 4. 输入类型为整型,且是非空的,不需要使用COALESCE函数,直接使用IS NULL进行非空判断。 最佳实践 3:正确设定游标的返回类型 前面我们已经讨论了如何声明存储过程的返回结果集。这里我们讨论一下结果集返回类型的问题。结果集的返回类型有两种:调用者(CALLER) 和客户应用(CLIENT)。首先我们看一下声明这两种游标的例子:

DB2存储过程语法

DB2存储过程语法 语法: CREATE PROCEDURE . (参数) [属性] <语句> --参数:SQL PL 存储过程中有三种类型的参数: IN:输入参数(默认值,也可以不指定) OUT:输出参数 INOUT:输入和输出参数 --属性 1、LANGUAGE SQL 指定存储过程使用的语言。LANGUAGE SQL 是其默认值。还有其它的语言供选择,比如Java 或者C,可以将这一属性值分别设置为LANGUAGE JAVA 或者LANGUAGE C。 2、DYNAMIC RESULT SETS 如果您的存储过程将返回n 个结果集,那么需要填写这一选项。 3、SPECIFIC my_unique_name 赋给存储过程一个唯一名称,如果不指定,系统将生成一个惟一的名称。一个存储过程是可以被重载的,也就是说许多个不同的存储过程可以使用同一个名字,但这些存储过程所包含的参数数量不同。通过使用SPECIFIC 关键字,您可以给每一个存储过程起一个唯一的名字,这可以使得我们对于存储过程的管理更加容易。例如,要使用SPECIFIC 关键字来删除一个存储过程,您可以运行这样的命令:DROP SPECIFIC PROCEDURE。如果没有使用SPECIFIC 这个关键字,您将不得不使用DROP PROCEDURE 命令,并且指明存储过程的名字及其参数,这样DB2 才能知道哪个被重载的存储过程是您想删除的。 4、SQL 访问级别 NO SQL:存储过程中不能有SQL 语句 CONTAINS SQL:存储过程中不能有可以修改或读数据的SQL 语句 READS SQL:存储过程中不能有可以修改数据的SQL 语句 MODIFIES SQL:存储过程中的SQL 语句既可以修改数据,也可以读数据 默认值是MODIFIES SQL,一个存储过程不能调用具有更高SQL 数据访问级别的其他存储过程。例如,被定义为CONTAINS SQL 的存储过程可以调用被定义为CONTAINS SQL 或NO SQL 的存储过程。但是这个存储过程不能调用被定义为READS SQL DATA 或MODIFIES SQL 的其他存储过程。 --语句 可以是一条单独的语句或者是一组由BEGIN [ATOMIC] ... END 复合语句 DB2数据库动态SQL应用 今天写了一个db2的存储过程,分享一下:

IBM WebSphere Portal系统性能调优

1.1 DB2性能调优 1.1.1 常规性能优化 1、以超级管理员登录到服务器上 1、再用db2管理员组中的成员登录: db2inst1 2、运行如下命令,以便连接到数据库jcrdb 3、为数据库做常规性能优化 A) 常规性能优化执行的命令命令 db2 -x -r "runstats.db2" "select rtrim(concat('runstats on table ',concat(rtri m(tabSchema),concat('.',concat(rtrim(tabname),' on all columns with distrib ution on all columns and sampled detailed indexes all allow write access '))))) from syscat.tables where type='T'"

大约经过2个小时后,命令执行完毕。

B) 执行动态性能调优命令:db2 -v -f "runstats.db2"

大约2-3个小时后命令执行成功结束

4、执行以下命令以便缩短数据库死锁时间 db2set DB2_EVALUNCOMMITTED=YES db2set DB2_INLIST_TO_NLJN=YES 1.1.2 设置参数以便提高性能的策略 1、以DB2管理员组成员登录,如:db2inst1 2、执行:db2set DB2_INLIST_TO_NLJN=YES 3、检查DB2现行参数:db2set 4、重起DB2以便使设置生效。 1.1.3 增加Member Manager数据库连接池缓存 1、以超级管理员登录WAS控制台,并找到数据库wmmdb

分区数据库环境下 DB2 LOAD 性能调优

分区数据库环境下 DB2 LOAD 性能调优 吴磊, 软件工程师, IBM 简介:本文详细阐述了分区数据库环境下 DB2 LOAD 的线程模型,并以 LOAD 线程模型为纲,详细分析每个线程的作用和特点,多方面、多角度地剖析影响其性能的因素,同时对性能的改进提供了参考建议。最后,以实例演示展示了性能调优的效果。DB2 LOAD 实用程序广泛应用于各行业、各领域的数据移动场景中,通过本文,相关读者可以充分理解 DB2 LOAD 的线程模型,影响各相关线程性能的关键参数,文中给出的参考建议与实例场景对读者有借鉴意义。 本文的标签:dpf, 关于产品, 性能, 管理 发布日期:2011 年 12 月 12 日 级别:中级访问情况 :806 次浏览 DB2 LOAD 线程模型 在本文中,除非特别声明,对于 DB2 LOAD 的讨论都是在分区数据库环境下。同时本文专注于讨论分区数据库环境下 DB2 LOAD 的性能调优,不再对分区数据库中的基本概念进行赘述,阅读本文的读者需要对分区数据库概念有基本的了解。LOAD 作为DB2 的实用程序,广泛地应用于各种数据移动场景中,尤其是在数据仓库的 ETL 过程中,LOAD 更是占据了主导地位。因此如何有效地提升 LOAD 性能,在数据移动场景中满足客户的需求和期望,是至关重要的。在对LOAD 性能进行调优之前,首先需要理解 LOAD 中各相关线程的作用和特点,从而有针对性地进行调整、优化。LOAD 线程模型如图 1 所示。 图1. LOAD 线程模型 在 DB2 中,LOAD 操作请求由代理线程 db2agent 受理,该线程负责派生、协调、监视相关LOAD 线程。LOAD 内部

DB2存储过程编写规范

DB2存储过程编写规范 版本号:1.0 修订记录:

目录 第一章.前言 (3) 一.编写目的 (3) 二.编写背景 (4) 三.适用范围 (4) 第二章.程序结构 (5) 一.整体结构 (5) 二.程序说明 (6) 三.变量定义 (7) 四.异常错误处理 (7) 五.程序正文 (9) 第三章.命名规范 (10) 一.存储过程命名 (10) 二.参数命名 (10) 三.变量命名 (11) 四.临时表命名 (11) 第四章.书写格式 (12) 一.表达范式 (12) 二.段落缩进 (12) 三.段落间隔 (12) 四.程序注释 (13) 第五章.注意事项 (13)

一.固定的输出参数 (13) 二.临时表的使用 (14) 三.数据的插入 (14) 四.where 条件 (14) 五.count 的使用 (15) 六.全表删除 (15) 七.MERGE(UPSERT)的使用 (15) 第六章.附录A (15) 第一章.前言 一.编写目的 为了提高开发效率和程序的可读性,降低程序编写过程的出错率和重复劳动性,保持程序编写风格的一致性和连贯性,特定此规范。

二.编写背景 目前数据库工具有很多种,考虑到数据仓库开发的实用性,数据仓库开发工具选择了DB2。 三.适用范围 本规范适用于招商银行信息技术部开发人员以及运行管理人员,从事DB2存储过程开发的相关技术人必须按照此规范编写存储过程。

第二章.程序结构 一.整体结构 创建DB2存储过程必须按如下标准格式书写: DROP PROCEDURE 模式名.过程名@ CREATE PROCEDURE 模式名.过程名 ( IN|OUT 输入|输出变量名输入|输出变量类型 [ , ... ] ) SPECIFIC模式名.过程名 LANGUAGE SQL /* 程序说明*/ BEGIN <程序体> END@ 其中: 1)模式名是用来指定该存储过程属于哪个模式下的,默认为编译该过程的登录用户名,但为了过程的统一管理以及各系统间的相互区分,必须要指定一个模式名,模式名由过程所属项目设计中统一制

db2编程使用技巧

db2编程使用技巧一(转帖) 1 DB2编程 1.1 建存储过程时CREATE 后一定不要用TAB键3 1.2 使用临时表3 1.3 从数据表中取指定前几条记录3 1.4 游标的使用4 注意commit和rollback 4 游标的两种定义方式4 修改游标的当前记录的方法5 1.5 类似DECODE的转码操作5 1.6 类似CHARINDEX查找字符在字串中的位置5 1.7 类似DATEDIF计算两个日期的相差天数5 1.8 写UDF的例子5 1.9 创建含IDENTITY值(即自动生成的ID)的表6 1.10 预防字段空值的处理6 1.11 取得处理的记录数6 1.12 从存储过程返回结果集(游标)的用法6 1.13 类型转换函数8 1.14 存储过程的互相调用8 1.15 C存储过程参数注意8 1.16 存储过程FENCE及UNFENCE 8 1.17 SP错误处理用法9 1.18 IMPORT用法9 1.19 VALUES的使用9 1.20 给SELECT 语句指定隔离级别10 1.21 ATOMIC及NOT ATOMIC区别10 2 DB2编程性能注意10 2.1 大数据的导表10 2.2 SQL语句尽量写复杂SQL 10 2.3 SQL SP及C SP的选择10 2.4 查询的优化(HASH及RR_TO_RS) 11 2.5 避免使用COUNT(*) 及EXISTS的方法11 3 DB2表及SP管理12 3.1 看存储过程文本12 3.2 看表结构12 3.3 查看各表对SP的影响(被哪些SP使用) 12 3.4 查看SP使用了哪些表12 3.5 查看FUNCTION被哪些SP使用12 3.6 修改表结构12 4 DB2系统管理13 4.1 DB2安装13

经典:深入了解IBM DB2的通信与连接过程

教你深入了解IBM DB2的通信与连接过程 本文详细描述了DB2? Universal Database?(DB2 UDB)代理的工作原理以及连接集中器的特性,并对DB2 连接上常见的问题及代理的优化作了详细的分析。希望通过本文让用户能够了解DB2 的连接机制和客户端与服务器端的交互作用,可以解决在实际的商业环境中遇到的性能问题。 简介 DB2 的代理(agent) 是位于DB2 服务器中的服务于应用程序请求的一些进程或线程。当有外部应用程序连接至DB2 实例提出访问请求时,DB2 的代理就会被激活去应答这些请求。一般DB2 的代理被称为工作代理,工作代理大概有三种类型:空闲代理、活动的协调代理、子代理。 ◆空闲代理:指的是没有任何任务的代理。这种代理不服务于任何远程连接也不服务于本地连接,处于一种备用或待命状态。 ◆活动的协调代理:指的是处于工作状态的代理,每一个外部应用程序产生的数据库活动连接的都有一个活动协调代理来为它服务。 ◆子代理:指的是接受协调代理分发出来的工作的下一级代理。在DB2 V95 以前,只有在多分区环境(MPP) 或节点内并行环境(SMP) 下才存在子代理,在DB2 V95 中所有环境中都可能存在子代理。 在DB2 服务器中有一个代理池,当实例刚启动后这里便有一些代理(其数量取决于实例参数NUM_INITAGENTS)。在没有任何数据库连接时,它们处于待命状态,就是空闲代理。而当有外部程序连接至数据库时,这些代理开始得到命令去服务于这些新建的连接,这时它们就变成了活动的协调代理。这些协调代理再将请求逐步细分,分配给下一级代理即子代理去处理。如果当前的代理都已经在工作了,同时又来了新的请求,数据库管理器会产生一个新的代理去应答。当事务处理完毕而且数据库连接断开后,协调代理要么返回代理池变回空闲代理,要么就自动消失了(取决于实例参数NUM_POOLAGENTS)。这就是一个代理的生命周期。 相关的配置参数 通过执行DB2 get dbm cfg 可以看到以下几个和代理相关的实例参数:MAXAGENTS,NUM_POOLAGENTS,NUM_INITAGENTS,MAX_COORDAGENTS,MAX_CONNECTIONS,MAXCAGENTS。下面对它们做一下简要介绍: ◆MAXAGENTS:这个参数为当前实例中全部代理的数量,包括协调代理,空闲代理和子代理之和。不过这个参数在DB2 V95 中已经不再使用了。 ◆NUM_POOLAGENTS:这个参数用来控制代理池中的空闲代理的数量。当活动的代理完成工作返回代理池变成空闲代理时,如果数量超过了这个参数,那么这个代理就会自动消失了。注意:在连接集中器激活的情况下,代理池中的空闲代理数目在某一时刻可能会超过NUM_POOLAGENTS 的大小,以应对突发的高密度连接。 ◆NUM_INITAGENTS:这个参数就是前面提到的在实例刚刚启动时便生成的一些空闲

DB2缓冲池和索引调优的方法

DB2缓冲池和索引调优的方法 1 DB2性能问题的表现 应用系统(OA)上的表现:一般是登录、首页、待办列表等数据量比较大的模块,响应时间长,耗时数秒到数十秒都有可能。有时候是用户访问高峰期慢,下班时间又比较正常。 操作系统上的表现:一般是中间件服务器(W AS)系统正常,CPU和IO占用不会持续超过50%,系统运行进程不会有持续的等待。数据库服务器则非常繁忙,CPU占用持续在50%以上,往往会达到持续90%左右,IO占用可能不高。从系统层面判断,性能瓶颈出在数据库上。 2 调优的基本思路 DB2的性能和操作系统、锁、缓冲池、索引等参数,以及SQL的写法都有很大关系,受限于个人认识,这里主要介绍缓冲池和索引的调优方法。 缓冲池的调整比较简单,一般可以先调整缓冲池,若效果不明显,则再调整索引和SQL。 3 缓冲池调优 缓冲池是内存中的一块区域,DB2会将用到数据放到缓冲池中提高性能。缓冲池太小,每次查询仍然要到磁盘中操作,达不到缓冲的效果。缓冲池太大,超出操作系统管理的限制,会导致数据库无法连接的错误。 缓冲池是通过表空间与数据表发生联系的,数据表存放在指定的表空间中,每个表空间又有指定的缓冲池。因为每张数据表存储的数据量都不同,一般根据每条记录存放的最大数据量,我们会为数据表分别指定4k-32k不同的表空间来存放,以达到优化存储和性能的目的,缓冲池也是类似。这个一般在创建数据库时就会分配好了。 在*unix下,可以使用下面的命令查看缓冲池相关信息: 切换到db2inst1账号 su – db2inst1 连接到pzbdw数据库

db2 connect to pzbdw 查看缓冲池定义 db2 "select BPNAME,NPAGES,PAGESIZE from syscat.bufferpools" 查看表空间的定义,包含表空间名称(TableSpaceName)、使用的缓冲池名称(BufferpoolName),表空间的页大小(TBSPageSize),缓冲池的数量(BufferpoolPages),缓冲池的页大小数据(BufferpoolSize)信息。 db2 "select s.TBSPACE TableSpaceName,b.BPNAME BufferpoolName,s.PAGESIZE TBSPageSize,b.NPAGES BufferpoolPages, b.PAGESIZE BufferpoolSize from SYSCA T.BUFFERPOOLS b,SYSCA T.TABLESPACES s where s.BUFFERPOOLID=b.BUFFERPOOLID"|more 查看mv_workitem表所在表空间和缓冲池信息,一般“MV_”开头的表使用的缓冲池是重点关注对象: db2 "select TABSCHEMA TableSchemaName, TABNAME TableName, t.TBSPACE TableSpaceName,b.BPNAME BufferpoolName, b.NPAGES BufferpoolPages, b.PAGESIZE BufferpoolSize from SYSCA T.TABLES t ,SYSCA T.BUFFERPOOLS b,SYSCA T.TABLESPACES s where tabname='MV_WORKITEM' and s.BUFFERPOOLID=b.BUFFERPOOLID and t.TBSPACE=s.TBSPACE" 开启缓冲池监控器: db2 update monitor switches using bufferpool on 在应用系统重现问题后,检查缓冲池的快照: db2 get snapshot for bufferpools on pzbdw|grep -i buffer|more

相关主题
文本预览
相关文档 最新文档