質問編集履歴

6

エラーメッセージを修正

2018/12/21 09:20

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -36,6 +36,12 @@
36
36
 
37
37
  一旦時間がかかるクエリーを個別にチューニングして様子を見ています。
38
38
 
39
+ Dec 20 01:02:51 [4191-1] LOG: could not send data to client: Broken pipe
40
+
41
+ Dec 20 01:02:51 [4192-1] LOG: unexpected EOF on client connection
42
+
43
+ Dec 20 01:02:51 [4193-1] LOG: disconnection: session time: 0:02:49.872 user=ユーザー database=データベース host=ホスト port=ポート
44
+
39
45
 
40
46
 
41
47
  2018.12.21 追記
@@ -50,8 +56,6 @@
50
56
 
51
57
  ### 発生している問題・エラーメッセージ
52
58
 
53
- 【パターンA時】
54
-
55
59
  PostgreSQL側に以下のメッセージが表示されます。
56
60
 
57
61
 
@@ -61,28 +65,6 @@
61
65
  LOG: unexpected EOF on client connection
62
66
 
63
67
  LOG: disconnection: session time: 0:02:51.973 user=USER database=DATABASE host=HOST port=PORT
64
-
65
-
66
-
67
- 【パターンB時】
68
-
69
- Dec 20 01:00:09 [244-1] LOG: statement: insert into テーブル
70
-
71
- ↑謎の空白と245~4188迄の番号欠番↓
72
-
73
- Dec 20 01:02:51 [4189-1] LOG: could not send data to client: Connection reset by peer
74
-
75
- Dec 20 01:02:51 [4189-2] STATEMENT: SELECT * FROM テーブルA LEFT JOIN テーブルB
76
-
77
- Dec 20 01:02:51 [4190-1] LOG: duration: 159422.699 ms
78
-
79
- Dec 20 01:02:51 [4191-1] LOG: could not send data to client: Broken pipe
80
-
81
- Dec 20 01:02:51 [4192-1] LOG: unexpected EOF on client connection
82
-
83
- Dec 20 01:02:51 [4193-1] LOG: disconnection: session time: 0:02:49.872 user=ユーザー database=データベース host=ホスト port=ポート
84
-
85
-
86
68
 
87
69
 
88
70
 

5

現状追加。

2018/12/21 09:20

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -35,6 +35,16 @@
35
35
  対応後で、若干エラー内容は変わりました。
36
36
 
37
37
  一旦時間がかかるクエリーを個別にチューニングして様子を見ています。
38
+
39
+
40
+
41
+ 2018.12.21 追記
42
+
43
+ トランザクションの分割のみでは結果が同じ模様。
44
+
45
+ 引っかかった物からクエリーチューニングを行っているが、
46
+
47
+ 難航中。(自由に実行、集中して作業が出来ないのが辛い所)
38
48
 
39
49
 
40
50
 

4

文言修正

2018/12/21 09:10

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -30,11 +30,11 @@
30
30
 
31
31
  トランザクションの分割を行い2日程動かしました。
32
32
 
33
- 現状では完走しないケースが有りますが、
33
+ 現状では完走しないケースがまだ有りますが、
34
34
 
35
- 対応後で若干エラー内容変わりました。
35
+ 対応後で若干エラー内容変わりました。
36
36
 
37
- 時間がかかるクエリーを個別にチューニングして様子を見ています。
37
+ 一旦時間がかかるクエリーを個別にチューニングして様子を見ています。
38
38
 
39
39
 
40
40
 
@@ -128,9 +128,9 @@
128
128
 
129
129
  $con->exec($delete_sql3, $where); //集計テーブルクリア
130
130
 
131
+ //<<---↑このクエリに時間がかかった場合はログがここまでになる
132
+
131
133
  $con->commit();
132
-
133
- //<<---↑このクエリに時間がかかった場合はログがここまでになる
134
134
 
135
135
  $con->begin();
136
136
 

3

トランザクションの分割をしました

2018/12/20 02:30

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -26,7 +26,21 @@
26
26
 
27
27
 
28
28
 
29
+ 2018.12.20 追記
30
+
31
+ トランザクションの分割を行い2日程動かしました。
32
+
33
+ 現状では完走しないケースが有りますが、
34
+
35
+ 対応後で若干エラー内容が変わりました。
36
+
37
+ 時間がかかるクエリーを個別にチューニングして様子を見ています。
38
+
39
+
40
+
29
41
  ### 発生している問題・エラーメッセージ
42
+
43
+ 【パターンA時】
30
44
 
31
45
  PostgreSQL側に以下のメッセージが表示されます。
32
46
 
@@ -40,9 +54,33 @@
40
54
 
41
55
 
42
56
 
57
+ 【パターンB時】
58
+
59
+ Dec 20 01:00:09 [244-1] LOG: statement: insert into テーブル
60
+
61
+ ↑謎の空白と245~4188迄の番号欠番↓
62
+
63
+ Dec 20 01:02:51 [4189-1] LOG: could not send data to client: Connection reset by peer
64
+
65
+ Dec 20 01:02:51 [4189-2] STATEMENT: SELECT * FROM テーブルA LEFT JOIN テーブルB
66
+
67
+ Dec 20 01:02:51 [4190-1] LOG: duration: 159422.699 ms
68
+
69
+ Dec 20 01:02:51 [4191-1] LOG: could not send data to client: Broken pipe
70
+
71
+ Dec 20 01:02:51 [4192-1] LOG: unexpected EOF on client connection
72
+
73
+ Dec 20 01:02:51 [4193-1] LOG: disconnection: session time: 0:02:49.872 user=ユーザー database=データベース host=ホスト port=ポート
74
+
75
+
76
+
77
+
78
+
43
79
  ### 該当のソースコード
44
80
 
45
81
 
82
+
83
+ 【初回質問時(パターンA)】
46
84
 
47
85
  $con = new PDO(DSN, USERNAME, PASSWORD);
48
86
 
@@ -66,17 +104,71 @@
66
104
 
67
105
 
68
106
 
107
+
108
+
109
+
110
+
111
+ 【トランザクション分割(パターンB)】
112
+
113
+ $con = new PDO(DSN, USERNAME, PASSWORD);
114
+
115
+ $con->begin();
116
+
117
+ $con->exec($delete_sql1, $where); //集計テーブルクリア
118
+
119
+ $con->commit();
120
+
121
+ $con->begin();
122
+
123
+ $con->exec($delete_sql2, $where); //集計テーブルクリア
124
+
125
+ $con->commit();
126
+
127
+ $con->begin();
128
+
129
+ $con->exec($delete_sql3, $where); //集計テーブルクリア
130
+
131
+ $con->commit();
132
+
133
+ //<<---↑このクエリに時間がかかった場合はログがここまでになる
134
+
135
+ $con->begin();
136
+
137
+ $con->exec($insert_sql1, $where); //集計テーブルへ集計データを挿入
138
+
139
+ $con->commit();
140
+
141
+ $con->begin();
142
+
143
+ $con->exec($insert_sql2, $where); //集計テーブルへ集計データを挿入
144
+
145
+ $con->commit();
146
+
147
+ $con->begin();
148
+
149
+ $con->exec($insert_sql3, $where); //集計テーブルへ集計データを挿入
150
+
151
+ $con->commit();
152
+
153
+
154
+
69
155
  ### 試したこと
70
156
 
157
+ 【パターンA時】
158
+
71
159
  PHP側に
72
-
73
-
74
160
 
75
161
  set_time_limit(0);
76
162
 
77
163
  ini_set("session.gc_maxlifetime", 60*30);
78
164
 
79
165
  を入れてみましたが改善できませんでした。
166
+
167
+
168
+
169
+ 【パターンB時】
170
+
171
+ トランザクションを分割しました。
80
172
 
81
173
 
82
174
 

2

ソースコードに情報を足しました。

2018/12/20 02:28

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -46,17 +46,23 @@
46
46
 
47
47
  $con = new PDO(DSN, USERNAME, PASSWORD);
48
48
 
49
+ $con->begin();
50
+
49
51
  $con->exec($delete_sql1, $where); //集計テーブルクリア
50
52
 
51
53
  $con->exec($delete_sql2, $where); //集計テーブルクリア
52
54
 
53
55
  $con->exec($delete_sql3, $where); //集計テーブルクリア
54
56
 
57
+ //<<---↑このクエリに時間がかかった場合はログがここまでになる
58
+
55
59
  $con->exec($insert_sql1, $where); //集計テーブルへ集計データを挿入
56
60
 
57
61
  $con->exec($insert_sql2, $where); //集計テーブルへ集計データを挿入
58
62
 
59
63
  $con->exec($insert_sql3, $where); //集計テーブルへ集計データを挿入
64
+
65
+ $con->commit();
60
66
 
61
67
 
62
68
 

1

ソースコードの情報を足しました

2018/12/18 02:14

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -46,7 +46,17 @@
46
46
 
47
47
  $con = new PDO(DSN, USERNAME, PASSWORD);
48
48
 
49
- $con->exec($delete_sql1, $where);
49
+ $con->exec($delete_sql1, $where); //集計テーブルクリア
50
+
51
+ $con->exec($delete_sql2, $where); //集計テーブルクリア
52
+
53
+ $con->exec($delete_sql3, $where); //集計テーブルクリア
54
+
55
+ $con->exec($insert_sql1, $where); //集計テーブルへ集計データを挿入
56
+
57
+ $con->exec($insert_sql2, $where); //集計テーブルへ集計データを挿入
58
+
59
+ $con->exec($insert_sql3, $where); //集計テーブルへ集計データを挿入
50
60
 
51
61
 
52
62