`
touchmm
  • 浏览: 1055044 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

快速找出DB2分区键设置不正确的表

阅读更多

DB2建立表的时候可以设置一个分区键,默认的情况下都是根据建表者自己的开发经验来决定。如果万一分区键没有设置正确,就会造成数据库节点数据分配不均匀。那么如何快速的找出哪些表的分区键设置不正确呢??
自己写了一个不足130行的小程序就可以解决这个问题了

//~---non-JDKimports--------------------------------------------------------

importorg.apache.commons.beanutils.DynaBean;
importorg.apache.commons.beanutils.RowSetDynaClass;

//~---JDKimports------------------------------------------------------------

importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
importjava.util.List;

publicclassMain{
privatestaticString
url
="jdbc:db2://:/",
username
="hndp",
password
="hndp";

privatestaticRowSetDynaClassgetResultSet(Stringsql){
Connectionconn
=null;
Statementstaem
=null;
ResultSetrs
=null;
RowSetDynaClassrsdc
=null;

try{
Class.forName(
"com.ibm.db2.jcc.DB2Driver");
conn
=DriverManager.getConnection(url,username,password);
staem
=conn.createStatement();
rs
=staem.executeQuery(sql);
rsdc
=newRowSetDynaClass(rs);
}
catch(Exceptione){
e.printStackTrace();
}
finally{
try{
if(rs!=null){
rs.close();
}
if(staem!=null){
staem.close();
}
if(conn!=null){
conn.close();
}
}
catch(SQLExceptione){
e.printStackTrace();
}
}

returnrsdc;
}

publicstaticvoidmain(String[]args){
if(args.length<5){
System.out.println(
"参数少了!==》java Main10.154.144.4050000DBNAMEuserpassschema%");

return;
}

url
="jdbc:db2://"+args[0]+":"+args[1]+"/"+args[2];
username
=args[3];
password
=args[4];

StringSQL_QUERY_TABLE_NAME
=
"selectRTRIM(CREATOR)asschema,RTRIM(NAME)astablenamefromSYSIBM.SYSTABLESwhereTYPE='T'andCREATOR='"
+args[5]+"'ANDNAMElike'"+args[6]+"'WITHUR";
StringSQL_T
=
"select'#TALBE#'ASTABLENAME,A.PARTION,A.ROWS,B.ROWS_COUNT,A.ROWS*1.0/B.ROWS_COUNT,DEC(A.ROWS*1.0/B.ROWS_COUNT,4,2)aspersonfrom"
+"(selectCOUNT(*)ASROWS,dbpartitionnum(#KEY#)ASPARTION"+"FROM"+"#TALBE#"
+"GROUPBYdbpartitionnum(#KEY#)"+")ASA,"+"("+"selectCOUNT(*)ASROWS_COUNT"+"FROM"
+"#TALBE#"+")ASb";
StringSQL_TIAOJIAN
=
"selectTABLENAME,MIN(PERSON)ASMIN,MAX(PERSON)ASMAX,MAX(PERSON)-MIN(PERSON)ASCHAfrom("+SQL_T
+")ASTABLEgroupbyTABLENAMEWITHUR";
RowSetDynaClassResultTableName
=getResultSet(SQL_QUERY_TABLE_NAME);

//获取所有表名
Listrows=ResultTableName.getRows();
intsize=rows.size();

System.out.println(
"表架构名:"+args[5]);
System.out.println(
"表筛选名:"+args[6]);
System.out.println(
"表名|最大分区占比|最小分区占比|差值");

for(inti=0;i<size;i++){
DynaBeanDBean
=(DynaBean)rows.get(i);

//扫描所有表的情况
RowSetDynaClassResult=getResultSet(setKeyToSQLString(SQL_TIAOJIAN,DBean.get("tablename").toString(),
DBean.get(
"schema").toString()));
ListListrows
=Result.getRows();

if(Listrows.size()>0){
DynaBeanDBean2
=(DynaBean)Listrows.get(0);

System.out.println(DBean2.get(
"tablename")+"|"+DBean2.get("max")+"|"+DBean2.get("min")
+"|"+DBean2.get("cha"));
}
}
}

privatestaticStringsetKeyToSQLString(StringsourceSQL,StringTableName,StringSchmea){
StringSQL_KEY
=
"selectnamefromSYSIBM.SYSCOLUMNSwherePARTKEYSEQ=1ANDTBNAME='#TABLENAME#'ANDTBCREATOR='#SCHEMA#'WITHUR";

SQL_KEY
=SQL_KEY.replaceAll("#TABLENAME#",TableName);
SQL_KEY
=SQL_KEY.replaceAll("#SCHEMA#",Schmea);

RowSetDynaClassResultTableName
=getResultSet(SQL_KEY);
Listrows
=ResultTableName.getRows();
DynaBeanDBean
=(DynaBean)rows.get(0);

//替换表名
sourceSQL=sourceSQL.replaceAll("#TALBE#",Schmea+"."+TableName);

returnsourceSQL.replaceAll("#KEY#",DBean.get("name").toString());
}
}

执行的方式和参数在CLI方式下:java -jar Partions_fat.jar 10.154.144.40 50000 数据库名 用户名 密码 架构名 表的筛选条件

前面2个是 IP 和数据端口 (该程序可以在安装jre的机器上执行,不必需要安装IBM DB2客户端)

执行的效果为:

(分区正常的)

(分区不太正常的现象)

说面一下:

最大分区占比 : 是该表在所有节点所占的最大比之;

最小分区占比 : 是该表在所有节点所占的最小比之;

差值:最大分区占比-最小分区占比

一个表的分区键如果设置的正确那么差值就应该是0.01~0.05之间,如果不正确那么就可以去找找原因了。

可能你会说程序只用Sysout打印出来而已,不好备查。OK , 你执行的

java -jar Partions_fat.jar 10.154.144.40 50000 数据库名 用户名 密码 架构名 表的筛选条件 >> 1.txt

提供一个独立的打包文件下载:

当您的朋友需要提取此文件时只需:
匿名提取文件连接 http://pickup.mofile.com/1627308298166791
或登录Mofile,使用提取码 1627308298166791 提取文件
分享到:
评论

相关推荐

    DB2性能安全文件

    这种情况通常是由于表的某些属性没有被正确设置。例如,表可能缺少`NO OVERHEAD`属性。 **如何指定该属性:** 在建表语句中加入`NO OVERHEAD`属性,如: ```sql CREATE TABLE YOUR_TABLE (COL1 INT) ORGANIZE BY ...

    DB2使用经验积累PDF

    - **看程序或语句具体的执行计划SHELL(改写后的语句)**:通过查看执行计划来分析SQL语句的执行路径,从而找出性能瓶颈。 - **两个表做JOIN的不同方式的区别**:不同的JOIN方式会影响查询的性能,例如`NOT IN`、`...

    db2错误代码查看.

    - **处理方法**:审查用户定义的函数或存储过程的代码,以找出潜在问题。 **30. +46401609 - 命名的存储过程超出了它可能返回的查询结果集的个数限制** - **描述**:存储过程返回的结果集数量超过限制。 - **...

    DB2高性能最优方法

    - 使用DB2的内置监控工具,如db2top、db2pd等,实时分析系统性能,找出瓶颈。 - 利用性能分析报告,定位性能问题并制定优化策略。 8. **维护与更新**: - 定期进行数据库维护,如重新组织表、重建索引,保持...

    DB2学习资料

    你可以使用DB2的性能监视工具,如db2top或db2pd,来分析数据库的运行状态,找出性能瓶颈并采取相应的优化措施。此外,合理的数据库设计和SQL编程实践也是提升性能的重要手段。 安全性是DB2不可忽视的部分。DB2提供...

    DB2数据库注意事项以及相关资料

    1. 查询优化:使用EXPLAIN分析查询计划,找出性能瓶颈。优化SQL语句,如避免全表扫描,使用JOIN代替子查询等。 2. 物理设计:合理的表分区、索引设计、数据分布策略能显著提升查询性能。考虑负载均衡和I/O效率,...

    DB2使用经验总结+DB2数据库性能优化的几个小技巧

    使用EXPLAIN分析查询计划,找出性能瓶颈,并通过调整SQL语句或创建新索引来改善。 3. 表设计:采用合适的数据类型,减少冗余数据,设计合理的表分区策略,有助于提高数据访问效率。 4. 内存调优:DB2的缓冲池是...

    db2pd 使用

    2. **优化SQL性能**:如果SQL执行效率低下,使用`db2pd -sql`查看其执行计划,找出可能的瓶颈,如全表扫描、排序过多等,然后进行相应的索引优化或SQL改写。 3. **监控资源使用**:定期运行`db2pd -dbm`,检查缓冲...

    DB2技术参考大全 高清版

    总的来说,"DB2技术参考大全 高清版"将深入解析DB2的各种特性和功能,包括但不限于SQL语法、存储过程、触发器、安全性管理、分区策略等,旨在帮助读者全面理解和应用DB2,以应对各种复杂的数据库管理挑战。...

    DB2性能调优资料,解决SQL执行慢的问题

    5. **监控和分析**:使用DB2的性能监控工具,如MON_GET_PROCEDURE和MON_GET_CALL,来分析存储过程的执行情况,找出瓶颈并进行优化。 6. **代码优化**:避免冗余的计算和无效的数据库访问,确保SQL语句简洁高效。 7...

    DB2数据库的学习资料

    例如,使用`db2diag.log`文件可以追踪数据库的运行日志,找出错误源头;遇到数据丢失,可能需要利用DB2的备份和恢复功能进行数据恢复。 此外,资料中可能还会涉及DB2的高可用性和集群技术,如纯度复制(PureScale)...

    关于DB2的实用技巧

    DB2是一款由IBM开发的关系型数据库管理系统,广泛应用于企业级数据...通过掌握以上DB2的实用技巧,你可以更加熟练地应对数据库管理中的各种挑战,提升数据库性能,保障数据安全,从而在实际工作中发挥出DB2的强大功能。

    DB2实例代码(300个)

    例如,找出所有薪资超过5000的员工: ```sql SELECT * FROM Employees WHERE Salary &gt; 5000; ``` “更新数据”是数据库操作的另一个重要方面。使用`UPDATE`语句,我们可以修改已存在的记录。比如提升所有部门经理...

    DB2 管理指南_实现

    通过使用DB2 Explain工具分析查询执行计划,可以找出性能瓶颈并进行相应调整。合理规划数据分区策略也能显著提升查询效率。 五、备份与恢复 数据保护是数据库管理的关键环节。DB2提供了多种备份类型(如完整备份、...

    sql和DB2错误代码信息

    在SQL和DB2数据库开发过程中,遇到错误代码是常见的现象。这些错误代码提供了关于执行的SQL语句或数据库操作失败的详细信息,...在实际开发中,遇到错误时,可以查阅DB2的官方文档或使用DB2的错误信息来找出解决方案。

    db2 故障诊断指南

    通过分析日志,可以找出导致错误的时间点和操作。 3. **SQL错误代码**:DB2返回的SQL状态码和错误代码提供了关于问题的详细信息。学习并理解这些代码能快速定位问题。 4. **Diagnostics Kit**:IBM提供了一套DB2...

    db2高性能最优方法.rar

    同时,了解并使用DB2的查询优化器(QOPT)生成的执行计划,有助于找出性能瓶颈。 3. **内存管理**:DB2使用缓冲池来缓存数据和索引,调整缓冲池大小和分配策略,可以减少磁盘I/O,提高性能。理解DB2的共享内存结构...

    DB2错误大全

    DB2错误大全主要涵盖了一系列与DB2数据库管理系统相关的SQLCODE错误和SQLSTATE信息。...在遇到这些问题时,通常需要检查SQL语句的语法、表和索引的定义、权限设置以及数据库配置,以找出问题的根源并进行相应的修复。

Global site tag (gtag.js) - Google Analytics