想起来一个问题,先记下来。

1. 同样的查询语句,从Java程序里面需要1分多钟,在CLP里面执行只用了不到一秒钟,这是怎么回事?

这个问题我遇到过两次,一次是因为从Java过来的语句使用了参数标记,导致执行计划和CLP里面直接赋值的语句的执行计划不同;一次是因为使用V8的驱动连接V10的数据库,数据到了服务器端,服务器编译的时候需要隐式的对一个连接字段进行类型转换。

但是这两次都是通过比较Java过来的语句的执行计划和CLP里面语句的执行计划发现的问题。CLP里面的执行计划很容易输出:

db2expln -d -t -g -q ""

但是从Java过来的语句的执行计划怎样得到呢?这个要从section里面得到。使用一下步骤:

1). 找到从Java过来的语句的executable_id:

db2 "select executable_id, stmt_text from table(mon_get_pkg_cache_stmt(null,null,null,-1)) where stmt_text like '%

2). 下面这个不知道是干啥的:

db2 "call explain_from_section(,'M',NULL,0,'',?,?,?,?,?)"

3). 格式化执行计划:

db2exfmt -d -g TIC -w -1 -n % -s % -# 0 -o explain.out

explain.out保存在从Java过来的语句的执行计划。

2. DB2 HADR搭建

3. DB2 HADR环境里面的load怎么做?

因为DB2 HADR是通过ship log进行数据同步的,那如果遇到load这种不太记日志的操作怎么办呢?之所以说load不太记日志,是因为load的数据不记录在日志里面,但是load操作的一些控制数据会记在日志里面。如果load操作在主机上执行了,但是备机有没有发现load image,这张表在备机上就会被标记为无效表。当服务从主机切换到备机,这张表就不能被访问了。

如果在HADR环境里面,这张表不能用了,怎么办呢?如果允许回切,那就切回去,如果不允许回切,打开备机上的ROS,把表里的数据导出来,再主机上导进去。

怎样解决HADR环境中的load问题呢?有两种思路:

1)使用load copy yes,这种load会产生一个load image,如果主机和备机可以共享存储(nfs/gpfs),可以把这个load image的路径放到共享路径里面。当备机从日志里面看到load开始的日志记录时,就会去找这个image,然后把数据导入到备机中。如果主机和备机没有条件使用共享的存储,那可以在load开始之前,先把hadr停下来,既在备机上执行:db2 deactivate db ,然后在主机上执行load copy yes,load结束之后,把生成的load image拷贝到悲伤同样的路径下,然后启动备机:db2 activate db 。这样,日志追平以后,备机上也会有数据了。

2)禁止HADR环境里面的load操作,也就是把db cfg里面的blocknonlogged打开。这样,所有不记日志的操作执行的时候都会报错。

4. HADR环境里面出现了问题以后,都怎么样诊断?

HADR这个组件时在db2diag.log里面消息记录最全的组件之一。当发生异常情况时,例如,网络断开等,首先去看一下db2diag.log的Error日志,看看发生了什么什么事情。

然后使用db2pd -db -hadr看一下状态。

5. HADR怎样切换?

首先解释一下,DB2 HADR的切换过程,对于graceful takeover:

1. 备机收到takeover这个命令以后,如果开了ROS,首先force application,然后发送一个消息给主机。然后等。

2. 主机收到这个消息,首先force application,然后发送剩下的日志给备机。

3. 主机改变自己的角色为备机,然后备机改变自己的角色为主机。

对于forced takeover:

1. 备机收到takeover命令,如果开了ROS,首先force application,然后发送一个消息给备机。然后等一会(忘记具体的时间了,好像是4秒钟),尽量收以下日志。然后改变角色。

2. 原主机收到消息以后,把自己的日志系统标记为不可用。如果只有读操作,主机上还可以做查询,但是如果还有写操作,主机就crash它自己。

如果切换的时候,主备机处于peer状态,应该使用db2 takeover hadr on db 进行graceful切换。但是想切的快,或者是切换的时候hang住了,就使用by force的强制切换。这里,说明一下,如果主备机载peer状态进行了by force的切换,当原备机接管服务以后,不要使用deactivate db的方式停止原主机,一定要用db2_kill的方式停止,好让主机做reintegration的时候,从尽量早的LSN去redo,从尽量早的地方做remote catchup。

另外一个注意的地方,HADR主备机切换以后,一定要检查一下备机上表的状态,防止有些表处于不可访问的状态,影响以后的交易。

5. 什么是reintegration?

reintegration的发生指以下场景:主备机运行过程中,使用了forced takeover,原来的备机称为主机。要把原来的主机不使用backup/restore的方式,而是它作为备机的角色加入到原来的主机,重新成为一对hadr。加入的命令时在原来的主机上执行:db2 start hadr on db as standby。像前面说的,执行start hadr之前,如果机器没有crash,必须使用db2_kill去停止原主机实例。

6. DB2 HADR支持NAT吗?

是的,支持。正常情况下,hadr主备机建立关系之前,两台机器会互相校验对方的IP地址。但是,有一个环境变量:db2set -lr | grep -i hadr | grep -i nat。可以把这个变量设置为yes,这样,hadr就不会校验IP地址了。

7. 当主机跑批的时候,备机replay跟不上,影响批处理性能怎么办?

在DB2 V10以前,没什么办法,你可以使用superasync,或者临时断开HADR。

V10以后,可以使用log spooling来解决这个问题。log spooling会开辟一段日志区域临时保存下收到的缓存,redo尽快去做。

java中跑批指的是什么_DB2几个问题的处理(三)相关推荐

  1. java中实例变量指什么呢?

    转自: java中实例变量指什么呢? java中实例变量简介说明 在类的声明中,属性是用变量来表示的,我们将这种变量称之为实例变量,每个对象都为类维护着自己的一份实例变量 实例变量简介:       ...

  2. Java中JDK到底指什么呢?

    转自: Java中JDK到底指什么呢? 下文笔者讲述Java中JDK的相关简介说明,如下所示: JDK功能:JDK用于java程序开发,她可以将一个.java文件编译为 .class的java字节码文 ...

  3. java中循环语句指哪些_java中的循环语句有哪些

    Java中有三种主要的循环结构: while 循环 do-while 循环 for 循环 顺序结构的程序语句只能被执行一次.如果您想要同样的操作执行多次,,就需要使用循环结构. 一.while循环 语 ...

  4. java中的函数指的是,函数式接口在Java中是指有且仅有一个抽象方法的接口。( )...

    [判断题]主动红外探测器用于室外警戒时,受环境气候影响较大,易产生误报. [单选题]鸟氨酸循环的限速酶: [判断题]外表酸度又称为发酵酸度,是指牛乳在放置过程中,由乳酸菌作用于乳糖产生乳酸而升高的那部 ...

  5. Python脚本---在 MySQL数据库中跑批加载多个表的数据

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/45841117 #!/usr/bin/env python # -*- coding:utf ...

  6. JAVA中如何计算文具店总费用,小学数学北师大2011课标版三年级文具店(小数的初步认识).doc...

    文具店(小数的初步认识) 学情分析: 小数的初步认识是小数学习的第一节课.是小数大小比较.小数加减法的基础.小数在日常生活中有广泛应用,学生在商品的价签上都看到过小数,并不陌生.但这是学生第一次认识小 ...

  7. Java中的多线程你只要看这一篇就够了

    如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...

  8. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  9. java中的反射(一)

    在java中反射是指在运行期动态的获取类型的信息,比如接口的信息,类的方法和成员变量.反射的入口是Class类下面我们来一起了解一下这个Class类. 在java中每个已加载的类都有一个类信息,每个对 ...

  10. Java 中的多线程你只要看这一篇就够了

    作者丨纳达丶无忌 https://www.jianshu.com/p/40d4c7aebd66 引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多 ...

最新文章

  1. python3 错误 Max retries exceeded with url 解决方法
  2. 碰到问题集锦(简述)1
  3. Kafka C++客户端库librdkafka笔记
  4. 3.2.1 配置构建Angular应用——简单的笔记存储应用——展示功能
  5. 利用JOrgChart只需2分钟即可配置简单组织机构图
  6. java学习(44):引用参数传递
  7. 这篇Cell里面的GSEA展示很不错!
  8. 你不是颠覆 IoT,就是被 IoT 颠覆!
  9. linux rec命令_文件过多时ls命令为什么会卡住?
  10. LINUX编译json-c错误的解决:autoreconf找不到,json_tokener.c报错
  11. 关于路由表,ARP表,MAC表的一些理解
  12. 2020安洵杯部分WP —— 没人比我更懂签到题和问卷题队伍
  13. (六)CRAFT----2019CVPR论文解读
  14. Potplayer关闭播放时的信息
  15. 有哪些有效解决程序员中年危机的方法?
  16. 手机怎么在日历上设置每月19号提醒?
  17. 【vn.py】量化策略历史回测(基于本地csv数据)
  18. P3131 [USACO16JAN]Subsequences Summing to Sevens S-二分+前缀和
  19. Wex5 组件的bind-visible属性控制显隐
  20. 2×500kVA(RCS9000)某10kV配电室设计(任务书+说明书+cad图纸)

热门文章

  1. generator.xml mysql_generatorConfig-mysql.xml中连接数据库的正确书写方式。
  2. golang 格式“占位符”%d,%f,%s等应用类型
  3. php paypal ipn返回验证,Paypal IPN检测退款,PHP
  4. oracle sql 查询无数据_信运大讲堂丨ORACLE数据库SQL和索引
  5. python二进制解码_使用python3对二进制数据进行编码和解码,以将其包含到JSON中...
  6. vue读取本机的excel文件的两种方式
  7. oracle PS/SQL DEVELOPER
  8. labelme也可以标注polygan
  9. jdbc.postgresql源码分析
  10. Android文件的保存(本地和SD卡)与读取