h*****6 发帖数: 866 | 1 stored procedure running 很慢, 如果把用到的几个tables drop掉,recreate 一
样的tables and indexes,速度就正常一段时间,几天后又会变慢,求建议。 |
D*********l 发帖数: 493 | 2 analyze table compute statistics |
y****w 发帖数: 3747 | 3 dbms? table size? any special feature enabled? change on the table (a lot
update/delete/insert?)?
【在 h*****6 的大作中提到】 : stored procedure running 很慢, 如果把用到的几个tables drop掉,recreate 一 : 样的tables and indexes,速度就正常一段时间,几天后又会变慢,求建议。
|
n****f 发帖数: 905 | 4 数据是逐渐增加, 还是每次更新(replace)?
请提供主要部分的代码。 |
s**********o 发帖数: 14359 | 5 DROP TABLE,让后用SELECT INTO,注意DATATYPE,尤其是VARCHAR有时候会变,
SP的快慢跟你INSERT的数据量有关,REBUILD INDEX也会长。
把SP掐头变成QUERY, RUN ESTIMATED EXECUTION PLAN,看哪里COST高 |
c*****d 发帖数: 6045 | 6 问题说的不是很清楚
估计是procedure A要select/insert/update/delete table B
然后每次重新建table B能加速执行A的速度?
这样的话肯定是B的statistics有问题 |
h*****6 发帖数: 866 | 7 1. dbms is Oralce 11g
2. sp has more than 40 update statements to update a table (more than 50
columns)
3. sp can be called by more than 400 users, concurrently calling not too
much actually.
4. the table has a column called session_id, sp delete rows from the table
based on session_id at the top and end of sp
5. after sp complete running, the table is always empty
6. a user usually insert, update, 10k-100k rows in the table
7. drop the table and recreate it, sp running time will be improved a lot. |
c*****d 发帖数: 6045 | 8 6是在sp里面还是外面?
【在 h*****6 的大作中提到】 : 1. dbms is Oralce 11g : 2. sp has more than 40 update statements to update a table (more than 50 : columns) : 3. sp can be called by more than 400 users, concurrently calling not too : much actually. : 4. the table has a column called session_id, sp delete rows from the table : based on session_id at the top and end of sp : 5. after sp complete running, the table is always empty : 6. a user usually insert, update, 10k-100k rows in the table : 7. drop the table and recreate it, sp running time will be improved a lot.
|
h*****6 发帖数: 866 | 9 6是在sp里面的,a user insert, update the table based on his own session_id.谢
谢。 |
c******n 发帖数: 7263 | |
|
|
y****w 发帖数: 3747 | 11 sp has more than 40 update statements to update a table (more than 50 ) ----
很可能你这些update可以合并。别说是一列一列的更新。
你最好贴个伪码上来大家看看。
如果每次调用都insert然后又清空,考虑用真正的临时表than regular table。
【在 h*****6 的大作中提到】 : 1. dbms is Oralce 11g : 2. sp has more than 40 update statements to update a table (more than 50 : columns) : 3. sp can be called by more than 400 users, concurrently calling not too : much actually. : 4. the table has a column called session_id, sp delete rows from the table : based on session_id at the top and end of sp : 5. after sp complete running, the table is always empty : 6. a user usually insert, update, 10k-100k rows in the table : 7. drop the table and recreate it, sp running time will be improved a lot.
|
c*****d 发帖数: 6045 | 12 基本就是statistics update的问题
目前你不想做更多改动的话
实现的方法就是在sp里insert执行完,run dbms_stats.get_table_stats
上面的方法对单用户有效
如果是多用户都要run这个sp,都要insert同一个table
你最好选择yhwang的建议,用临时表
各个session用自己的
【在 h*****6 的大作中提到】 : 6是在sp里面的,a user insert, update the table based on his own session_id.谢 : 谢。
|
h*****6 发帖数: 866 | |
B*****g 发帖数: 34098 | 14 俺sp很少用临时表,都是collection直接操作
【在 c*****d 的大作中提到】 : 基本就是statistics update的问题 : 目前你不想做更多改动的话 : 实现的方法就是在sp里insert执行完,run dbms_stats.get_table_stats : 上面的方法对单用户有效 : 如果是多用户都要run这个sp,都要insert同一个table : 你最好选择yhwang的建议,用临时表 : 各个session用自己的
|
y****w 发帖数: 3747 | 15 if不需要复杂查询,不需要跟谁join. db2的collection来的晚,俺还不习惯。
【在 B*****g 的大作中提到】 : 俺sp很少用临时表,都是collection直接操作
|
B*****g 发帖数: 34098 | 16 为啥不在最开始的SQL语句里解决?
【在 y****w 的大作中提到】 : if不需要复杂查询,不需要跟谁join. db2的collection来的晚,俺还不习惯。
|
y****w 发帖数: 3747 | 17 没听懂。。。
【在 B*****g 的大作中提到】 : 为啥不在最开始的SQL语句里解决?
|
B*****g 发帖数: 34098 | 18 你为啥要在tt join,提前join好了就不要tt了
我tt一般要外部链接才会用到
【在 y****w 的大作中提到】 : 没听懂。。。
|