質問編集履歴
6
SQL修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -26,6 +26,8 @@
|
|
26
26
|
COLUMN1
|
27
27
|
, COLUMN2
|
28
28
|
, COLUMN3
|
29
|
+
, COLUMN4
|
30
|
+
, SORT_COLUMN
|
29
31
|
, DENSE_RANK() OVER(ORDER BY SORT_COLUMN) AS SORT_NO
|
30
32
|
FROM
|
31
33
|
TMP_TABLE
|
@@ -34,6 +36,7 @@
|
|
34
36
|
T.COLUMN1 = WK_T.COLUMN1
|
35
37
|
AND T.COLUMN2 = WK_T.COLUMN2
|
36
38
|
AND T.COLUMN3 = WK_T.COLUMN3
|
39
|
+
AND T.COLUMN4 = WK_T.COLUMN4
|
37
40
|
AND T.SORT_COLUMN = WK_T.SORT_COLUMN
|
38
41
|
)
|
39
42
|
;
|
5
情報の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -44,6 +44,62 @@
|
|
44
44
|
|
45
45
|
### 補足情報
|
46
46
|
|
47
|
+
・ACTIVEなSQLのコストを確認すると233059397でした。(そこからコストは変化しませんでした)
|
48
|
+
|
49
|
+
・また、以下のSQLでセッション情報を確認しました。
|
50
|
+
```
|
51
|
+
select
|
52
|
+
a.INST_ID
|
53
|
+
, a.SID
|
54
|
+
, a.TYPE
|
55
|
+
, a.ACTION
|
56
|
+
, a.COMMAND
|
57
|
+
, c.COMMAND_NAME
|
58
|
+
, a.STATUS
|
59
|
+
, a.LAST_CALL_ET -- 今の状態になってからの経過時間
|
60
|
+
, trunc((sysdate - a.SQL_EXEC_START) * 24 * 60 * 60, 2) as "秒" --実行し続けている時間
|
61
|
+
, a.WAIT_CLASS -- 待機イベントクラス
|
62
|
+
, a.EVENT ----- 一時セグメントを利用しているか
|
63
|
+
, u.TABLESPACE
|
64
|
+
, u.SEGTYPE -- 一時セグメントの種別
|
65
|
+
, u.BLOCKS -- 割り当てられたブロック数
|
66
|
+
--PGA情報
|
67
|
+
, p.PGA_USED_MEM --現在使用中のPGA
|
68
|
+
, p.PGA_ALLOC_MEM --現在割り当てられているPGAメモリ
|
69
|
+
, p.PGA_FREEABLE_MEM --解放できる割当済みPGAメモリ
|
70
|
+
, p.PGA_MAX_MEM --割り当てられた最大PGAメモリ
|
71
|
+
from
|
72
|
+
gv$SESSION a
|
73
|
+
left outer join gv$process p
|
74
|
+
on a.INST_ID = p.INST_ID
|
75
|
+
and a.PADDR = p.ADDR
|
76
|
+
left outer join gv$transaction r
|
77
|
+
on a.SADDR = r.SES_ADDR
|
78
|
+
and a.INST_ID = r.INST_ID
|
79
|
+
left outer join gV$TEMPSEG_USAGE u
|
80
|
+
on a.SADDR = u.SESSION_ADDR
|
81
|
+
and a.SERIAL# = u.SESSION_NUM
|
82
|
+
and a.INST_ID = u.INST_ID
|
83
|
+
left outer join v$sqlcommand c
|
84
|
+
on a.COMMAND = c.COMMAND_TYPE
|
85
|
+
where
|
86
|
+
1 = 1
|
87
|
+
and a.TYPE = 'USER'
|
88
|
+
and a.status = 'ACTIVE'
|
89
|
+
order by
|
90
|
+
a.INST_ID
|
91
|
+
, a.STATUS
|
92
|
+
, a.SQL_EXEC_START
|
93
|
+
|
94
|
+
|
95
|
+
```
|
96
|
+

|
97
|
+
|
98
|
+
・使用している一時表の構造ですが、キーは無しでNUMBER型の項目が10個あるだけです。
|
99
|
+
|
100
|
+
・SORT_COLUMNでインデックスを作成しましたが効果は全くありませんでした。
|
101
|
+
|
102
|
+
|
47
103
|
当方、プログラミング初学者の為解決に必要な情報が分かりません。不足している情報があればご指摘いただきたいです。
|
48
104
|
|
49
105
|
|
4
あ
test
CHANGED
File without changes
|
test
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
```
|
41
41
|
|
42
42
|
### 試したこと
|
43
|
-
更新対象データ件数を8000件から6000件に減らすと、こ
|
43
|
+
更新対象データ件数を8000件から6000件に減らすと、同じUPDATE文が1秒以内で実行完了することを確認しました。
|
44
44
|
|
45
45
|
### 補足情報
|
46
46
|
|
3
文章の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -5,9 +5,8 @@
|
|
5
5
|
### 前提・発生している問題
|
6
6
|
|
7
7
|
OracleDBを使用し、一時表へデータをINSERT・一時表内でUPDATE・一時表からSELECTを行うプロシージャを作成しました。
|
8
|
-
SQLDevelopperで実行した際、更新対象データ件数が8000件程度であればUPDATE文1つに20分以上かかります(1時間かかる場合もあり、その時々によって変わる)。
|
8
|
+
SQLDevelopperで実行した際、更新対象データ件数が8000件程度であれば下記のUPDATE文1つに20分以上かかります(1時間かかる場合もあり、その時々によって変わる)。
|
9
|
-
しかし、更新対象データ件数が6000件の場合同じUPDATE文は1秒以内で完了します。
|
10
|
-
|
9
|
+
UPDATE文はプロシージャ内で複数記述していますが、処理時間を要するものは** DENSE_RANK() OVER(~~) **を利用している以下のようなUPDATE文の場合に限られるようで、それ以外のUPDATE文は1秒以内で完了します。
|
11
10
|
|
12
11
|
UPDATE文の大幅な処理速度の低下について考えられる原因・解決策・調査方法をご教示ください。
|
13
12
|
|
2
試したこと追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -40,6 +40,9 @@
|
|
40
40
|
;
|
41
41
|
```
|
42
42
|
|
43
|
+
### 試したこと
|
44
|
+
更新対象データ件数を8000件から6000件に減らすと、この問題は発生しないことを確認しました。
|
45
|
+
|
43
46
|
### 補足情報
|
44
47
|
|
45
48
|
当方、プログラミング初学者の為解決に必要な情報が分かりません。不足している情報があればご指摘いただきたいです。
|
1
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,6 +8,8 @@
|
|
8
8
|
SQLDevelopperで実行した際、更新対象データ件数が8000件程度であればUPDATE文1つに20分以上かかります(1時間かかる場合もあり、その時々によって変わる)。
|
9
9
|
しかし、更新対象データ件数が6000件の場合同じUPDATE文は1秒以内で完了します。
|
10
10
|
更新対象データ件数が8000件の場合、すべてのUPDATE文が20分以上かかるわけではなく、** DENSE_RANK() OVER(~~) **を利用している以下のようなUPDATE文の場合に限られるようで、それ以外のUPDATE文は1秒以内で完了します。
|
11
|
+
|
12
|
+
UPDATE文の大幅な処理速度の低下について考えられる原因・解決策・調査方法をご教示ください。
|
11
13
|
|
12
14
|
|
13
15
|
### 該当のソースコード
|