質問編集履歴

6

SQL修正

2023/08/18 02:30

投稿

namoine_nepher
namoine_nepher

スコア0

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

情報の追加

2023/08/17 07:27

投稿

namoine_nepher
namoine_nepher

スコア0

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
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-08-17/94d4b19c-0ed3-40d6-8dea-78b36aa0fd2b.png)
97
+
98
+ ・使用している一時表の構造ですが、キーは無しでNUMBER型の項目が10個あるだけです。
99
+
100
+ ・SORT_COLUMNでインデックスを作成しましたが効果は全くありませんでした。
101
+
102
+
47
103
  当方、プログラミング初学者の為解決に必要な情報が分かりません。不足している情報があればご指摘いただきたいです。
48
104
 
49
105
 

4

2023/08/16 05:18

投稿

namoine_nepher
namoine_nepher

スコア0

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

文章の修正

2023/08/16 05:17

投稿

namoine_nepher
namoine_nepher

スコア0

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
- 更新対象データ件数が8000件の場合、すべてのUPDATE文が20分以上かかわけでなく、** DENSE_RANK() OVER(~~) **を利用している以下のようなUPDATE文の場合に限られるようで、それ以外のUPDATE文は1秒以内で完了します。
9
+ UPDATE文はプロシージャ内で複数記述しています、処理時間を要すものは** DENSE_RANK() OVER(~~) **を利用している以下のようなUPDATE文の場合に限られるようで、それ以外のUPDATE文は1秒以内で完了します。
11
10
 
12
11
  UPDATE文の大幅な処理速度の低下について考えられる原因・解決策・調査方法をご教示ください。
13
12
 

2

試したこと追加

2023/08/16 04:58

投稿

namoine_nepher
namoine_nepher

スコア0

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

誤字

2023/08/16 01:44

投稿

namoine_nepher
namoine_nepher

スコア0

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
  ### 該当のソースコード