当前位置:首页 » 编程语言 » db2sql超长
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

db2sql超长

发布时间: 2022-11-06 20:07:02

⑴ DB2 load数据时字段超长,怎么才能自动截断存入

这个好说,首先,你先建一个varchar(30)的temp表。然后将数据load进这个temp表。

再substr()切取这个临时表的列前6位,装到你的目标表tablename中去不就可以了。你在文件中想要读取前6位可能行不通啊。

sql 语句 最大长度限制 DB2如何修改最大长度限制

home/datamart$ db2 get db cfg|grep HEAP
Sort heap thres for shared sorts (4KB) (SHEAPTHRES_SHR) = AUTOMATIC
Sort list heap (4KB) (SORTHEAP) = AUTOMATIC
Database heap (4KB) (DBHEAP) = AUTOMATIC
Utilities heap size (4KB) (UTIL_HEAP_SZ) = 103816
SQL statement heap (4KB) (STMTHEAP) = AUTOMATIC
Default application heap (4KB) (APPLHEAPSZ) = AUTOMATIC
Statistics heap size (4KB) (STAT_HEAP_SZ) = AUTOMATIC

修改 STMTHEAP

P570_B_2:/DATAMART/usr/datamart >db2 update db cfg for datamart using STMTHEAP 20480 AUTOMATIC
DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully.

P570_B_2:/DATAMART/usr/datamart >db2stop force
10/19/2012 10:56:14 0 0 SQL1064N DB2STOP processing was successful.
SQL1064N DB2STOP processing was successful.
P570_B_2:/DATAMART/usr/datamart >db2start
10/19/2012 10:56:20 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.

P570_B_2:/DATAMART/usr/datamart >db2 get db cfg |grep STMT
SQL statement heap (4KB) (STMTHEAP) = AUTOMATIC(20480)
Automatic statement statistics (AUTO_STMT_STATS) = OFF

DB2 V9.5 for Linux, UNIX, and Windows

stmtheap - 语句堆大小配置参数

此参数指定语句堆的大小,语句堆在编译 SQL 或 XQuery 语句期间用作 SQL 或 XQuery 编译器的工作空间。

配置类型
数据库
参数类型
可联机配置
传播类
语句边界
缺省值 [范围]

带有本地客户机和远程客户机的数据库服务器:缺省值为 AUTOMATIC(底层值为 8192)。
还可将该参数仅设置为某个固定值。
带有本地客户机和远程客户机的数据库服务器:缺省值为 AUTOMATIC(底层值为 2048)。
还可将该参数仅设置为某个固定值。
对于 32 位平台
AUTOMATIC [128 - 524288]
对于 64 位平台
AUTOMATIC [128 - 524288]

注: 在初始创建数据库后,缺省值将由 DB2® 配置顾问程序进行更改。

计量单位
页 (4 KB)
分配时间
对于预编译或绑定期间的每个语句
释放时间
当每个语句的预编译或绑定完成时

此区域并不总是处于分配状态,但要对每个处理的 SQL 或 XQuery
语句进行分配和释放。注意:对于动态 SQL 或 XQuery 语句,将在程序执行期间使用此工作区; 而对于静态 SQL 或 XQuery
语句,在绑定进程而不是在程序执行期间使用此工作区。

可使用底层值或固定值将 STMTHEAP 参数设置为 AUTOMATIC。该参数设置为 AUTOMATIC 时,底层值会对使用动态连接枚举为单个编译分配的内存量加以限制。如果遇到内存限制,语句编译会使用贪婪连接枚举和不受限制的语句堆重新启动。其仅受到剩余应用程序内存量
(APPL_MEMORY)、实例内存 (INSTANCE_MEMORY) 或系统内存的限制。如果贪婪连接枚举成功完成,那么将向应用程序返回一个 SQL0437W 警告。如果贪婪连接枚举也遇到内存限制,那么语句预编译失败,且带有
SQL0101N。

例如,db2 update db cfg for SAMPLE using STMTHEAP 8192 AUTOMATIC 将为动态连接枚举设置
8192 *4K (32MB) 的语句堆限制并对贪婪连接枚举不设限制。

当 STMTHEAP 参数设置为固定值时,该限制同时适用于动态和贪婪连接枚举。如果动态连接枚举遇到内存限制,那么将使用同一固定语句堆限制来尝试贪婪连接枚举。在 AUTOMATIC 情况下,类似的警告/错误也适用。

例如,db2 update db cfg for SAMPLE using STMTHEAP 8192 将同时为动态和贪婪连接枚举生成
8192 * 4K (32MB) 的语句堆限制。

如果在运行时的查询性能不够高,请考虑增大 stmtheap 配置参数值(底层为 AUTOMATIC 的值或固定值),从而确保动态编程连接枚举能够成功。如果您更新 stmtheap 配置参数以提高查询性能,那么会导致重新编译语句,以便查询优化器可以创建新的访问方案来利用已更改数量的语句堆。

注: 仅在优化类 3 和更高级别(缺省值为 5)进行动态编程联合枚举。

⑶ SQL 语句 最大长度限制 DB2如何修改最大长度限制

home/datamart$ db2 get db cfg|grep HEAP
Sort heap thres for shared sorts (4KB) (SHEAPTHRES_SHR) = AUTOMATIC
Sort list heap (4KB) (SORTHEAP) = AUTOMATIC
Database heap (4KB) (DBHEAP) = AUTOMATIC
Utilities heap size (4KB) (UTIL_HEAP_SZ) = 103816
SQL statement heap (4KB) (STMTHEAP) = AUTOMATIC
Default application heap (4KB) (APPLHEAPSZ) = AUTOMATIC
Statistics heap size (4KB) (STAT_HEAP_SZ) = AUTOMATIC

修改 STMTHEAP

P570_B_2:/DATAMART/usr/datamart >db2 update db cfg for datamart using STMTHEAP 20480 AUTOMATIC
DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully.

P570_B_2:/DATAMART/usr/datamart >db2stop force
10/19/2012 10:56:14 0 0 SQL1064N DB2STOP processing was successful.
SQL1064N DB2STOP processing was successful.
P570_B_2:/DATAMART/usr/datamart >db2start
10/19/2012 10:56:20 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.

P570_B_2:/DATAMART/usr/datamart >db2 get db cfg |grep STMT
SQL statement heap (4KB) (STMTHEAP) = AUTOMATIC(20480)
Automatic statement statistics (AUTO_STMT_STATS) = OFF

⑷ DB2 SQL 语句 如何修改最大长度限制

能不能不要用中文做这些数据库对象的名字?想试着帮你改下,需要你把你的需求描述下。同时,需要你把这之中牵涉到的数据库对象的创建语句都贴出来。最后,如果你已经做了测试了,可把遇到的问题描述下,这样会比较有针对性。

⑸ SQL 语句 最大长度限制 DB2如何修改最大长度限制

<proinsight-br>10/19/2012 10:56:20 0 0 SQL1063N DB2START processing was successful.<proinsight-br>Automatic statement statistics (AUTO_STMT_STATS) = OFFDB2 V9.5 for Linux, UNIX, and Windowsstmtheap - 语句堆大小配置参数此参数指定语句堆的大小,语句堆在编译 SQL 或 XQuery 语句期间用作 SQL 或 XQuery 编译器的工作空间。 配置类型数据库 参数类型可联机配置 传播类语句边界 缺省值 [范围] 对于32 位平台AUTOMATIC [128 - 524288] 带有本地客户机和远程客户机的数据库服务器:缺省值为 AUTOMATIC(底层值为 2048)。还可将该参数仅设置为某个固定值。 对于64 位平台AUTOMATIC [128 - 524288] 带有本地客户机和远程客户机的数据库服务器:缺省值为 AUTOMATIC(底层值为 8192)。还可将该参数仅设置为某个固定值。注: 在初始创建数据库后,缺省值将由 DB2�0�3 配置顾问程序进行更改。 计量单位页(4 KB) 分配时间对于预编译或绑定期间的每个语句 释放时间当每个语句的预编译或绑定完成时此区域并不总是处于分配状态,但要对每个处理的 SQL 或 XQuery 语句进行分配和释放。注意:对于动态 SQL 或 XQuery 语句,将在程序执行期间使用此工作区; 而对于静态 SQL 或 XQuery 语句,在绑定进程而不是在程序执行期间使用此工作区。可使用底层值或固定值将 STMTHEAP 参数设置为 AUTOMATIC。该参数设置为 AUTOMATIC 时,底层值会对使用动态连接枚举为单个编译分配的内存量加以限制。如果遇到内存限制,语句编译会使用贪婪连接枚举和不受限制的语句堆重新启动。其仅受到剩余应用程序内存量 (APPL_MEMORY)、实例内存 (INSTANCE_MEMORY) 或系统内存的限制。如果贪婪连接枚举成功完成,那么将向应用程序返回一个 SQL0437W 警告。如果贪婪连接枚举也遇到内存限制,那么语句预编译失败,且带有 SQL0101N。例如,db2 update db cfg for SAMPLE using STMTHEAP 8192 AUTOMATIC 将为动态连接枚举设置 8192 *4K (32MB) 的语句堆限制并对贪婪连接枚举不设限制。当STMTHEAP 参数设置为固定值时,该限制同时适用于动态和贪婪连接枚举。如果动态连接枚举遇到内存限制,那么将使用同一固定语句堆限制来尝试贪婪连接枚举。在 AUTOMATIC 情况下,类似的警告/错误也适用。例如,db2 update db cfg for SAMPLE using STMTHEAP 8192 将同时为动态和贪婪连接枚举生成 8192 * 4K (32MB) 的语句堆限制。如果在运行时的查询性能不够高,请考虑增大 stmtheap 配置参数值(底层为 AUTOMATIC 的值或固定值),从而确保动态编程连接枚举能够成功。如果您更新 stmtheap 配置参数以提高查询性能,那么会导致重新编译语句,以便查询优化器可以创建新的访问方案来利用已更改数量的语句堆。注: 仅在优化类 3 和更高级别(缺省值为 5)进行动态编程联合枚举。<proinsight-br>

⑹ DB2如何修改sql最大长度限制

DB2中的限制之一SQL标识符的长度限制

作者﹕CCBZZP

在现实的DB2应用中大家可能经常会遇到一些错误,错误的原因是对DB2的
限制不太了解而引起的,在此我简单地总结一下,欢迎大家继续﹐以便和大家共享﹐
共同探讨﹐共同近步﹗(以下主要以DB2 7.X为例)。
1. 最长的认证名(单字节字符)<=30
2. 最长的约束名称<=18
3. 最长的关联名称<=128
4. 最长的条件名称<=64
5. 最长的游标名称<=18
6. 最长数据源列名称<=128
7. 最长数据源索引名称<=128
8. 最长数据源名称<=128
9. 最长数据源表名称(远程认证名称)<=128
10. 最长外部程序名称<=8
11. 最长主机标识符<=255
12. 最长数据源用户的标识符(远程认证名称)<=30
13. 最长标签名称<=64
14. 最长方法名称<=18
15. 最长参数名称<=128
16. 最长访问数据源的口令<=32
17. 最长保存点名称<=128
18. 最长模式名称<=30
19. 最长服务器(数据库别名)<=8
20. 最长SQL变量名称<=64
21. 最长语句名称<=18
22. 最长转换组名<=18
23. 最长不受限制的列名<=30
24. 最长不受限制的包名<=8
25. 最长不受限定的用户自定义类型,用户自定义函数,缓冲池,表空间,节点组,
触发器索引,索引规范名称<=18
26. 最长不受限定的表名,视图,存储过程名,别称或别名<=128
27. 最长的包装器名<=128

⑺ DB2 中查询语句超过了表限制怎么办

语句太长、太复杂,超出了DB2的限制,重新SQL语句吧。
建立临时表,把数据放入临时表中。

db2 => ? sql101

SQL0101N The statement is too long or too complex.

Explanation:

The statement could not be processed because it exceeds a system limit
for either length or complexity, or because too many constraints or
triggers are involved.

If the statement is one that creates or modifies a packed description,
the new packed description may be too large for its corresponding column
in the system catalogs.

Federated system users should also check to see if the statement:
* Exceeds either a federated server system limit or a data source
system limit for length or complexity.
* Violates some other data source specific limit.

The statement cannot be processed.

Note: Where character data conversions are performed for applications
and databases running under different codepages, the result of the
conversion is exceeding the length limit.

User response:

Either:
* Break the statement up into shorter or less complex SQL statements.
* Increase the size of the statement heap (stmtheap) in the database
configuration file.
* Rece the number of check or referential constraints involved in the
statement or rece the number of indexes on foreign keys.
* Rece the number of triggers involved in the statement.
* Federated system users: determine which data source is failing the
statement (see the Troubleshooting Guide for proceres to follow to
identify the failing data source) and determine the cause of the
rejection. If the rejection is coming from the federated server,
increase the size of the statement heap (stmtheap) in the database
configuration file.

sqlcode: -101

sqlstate: 54001

⑻ 【DB2】SQL优化

于我来说,我喜欢技术,不偏执于某一类开发语言,愿意花时间精力去解决问题。

1.去除在谓词列上编写的任何标量函数

优化前:(耗时3.1s)

优化后:(耗时0.922s)

总结:

DB2可以选择使用START_DATE上的列索引,但是在列上使用了函数后,DB2就无法使用列索引了,从而导致查询效率变低。

2.去除在谓词列上编写的任何数学运算

优化前:(耗时10.265)

优化后:(耗时3.39s)

总结:

DB2查询时候,会优先选择列CONTRACT_AMT上的索引,如果直接对列CONTRACT_AMT应用数学运算,DB2就无法使用索引了。一定要做到:列本身(不加数学运算)放在操作符的一边,而所有的计算都放在另外一边。

3.SQL语句中指定查询列

优化前:(耗时13.15s)

优化后:(耗时2.922s)

总结:

如果Select包含不需要的列,优化工具会选择Indexonly=’N’,这会强制DB2必须进入数据页来得到所请求的特定列,这就要求更多的I/O操作,梁歪,这些多余的列可能是某些排序的部分,这样一来就需要和传递一个更大的排序文件,相应的会使排序成本更高。

4.尽可能不使用distinct

优化前:(耗时0.687s)

优化后:(耗时0.437s)

总结:

在测试distinct与group by性能的过程中,在列CST_ID上添加索引后,发现group by 确实比distinct快一些,但是在数据分布比较离散的情况下使用group by ,比较集中的情况下使用distinct.表数据量较少的情况随便使用哪个都一样, 不管选择谁,都要建立索引

5.Exists、in、not in 、not exists的使用场景选择

5.1 in跟exists的区别:

例如:表A(小表),表B(大表)

优化前:(耗时1.93s)

优化后:(耗时1.125s)

相反的,

优化前:(耗时1.9s)

优化后:(耗时1.0s)

总结:

in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的。 如果查询的两个表大小相当,那么用in和exists差别不大;如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in;

简称:子大Exists,子小in

5.2 not in 与 not exists区别:

如果查询语句使用了not in,那么对内外表都进行全表扫描,没有用到索引;而not exists的子查询依然能用到表上的索引。所以无论哪个表大,用not exists都比not in 要快。

6.尽可能使用union all来代替union

优化前:(耗时15.344s)

优化后:(耗时2.719s)

总结:

在union中,DB2最后会自动执行一个排序来消除重复值,这样是很耗费资源的,所以在不需要去重复的情况下,尽可能使用UNION ALL 代替union

N.模板

优化前:(耗时3.1s)

优化后:(耗时0.922s)

总结:

⑼ db2 sql语句优化

b/g/h三个表的workdate有索引么?另外,1.如果可能最好将所有联表用的字段都进行索引,2.(workdate,agentserialno)可以考虑二维索引,前提是空间足够的话,这样效率提高会非常明显。

⑽ 请教 :db2数据库 如何查找出执行时间最长的sql

执行时间最长的20条SQL语句(按时间降序排列),可保存为脚本方便调用:
SELECT rows_read / (num_executions + 1) as avg_rows_read,
rows_written / (num_executions + 1) as avg_rows_written,
stmt_sorts / (num_executions + 1) as avg_sorts,
total_exec_time / (num_executions + 1) as avg_exec_time,
substr(stmt_text,1,1000) as SQL_Stmt
FROM SYSIBMADM.SNAPDYN_SQL ORDER BY avg_exec_time desc fetch first 20 rows only;
祝你学习愉快!