帰ってきた! 標準はあるにはあるが癖の多いSQL #22 - Multi Row INSERT Tweet
Previously on Mac De Oracle
と言いたいところですが、前回は、読了ネタだったのでw 前々回の話に関連して。。。
前々回は、帰ってきた! 標準はあるにはあるが癖の多いSQL #21 - Table Value Constructer(TVC)- ハードパース時間とメモリ消費量 / BONUS TRACKでした。
おまけのおまけ的な内容で前々回のネタと関連はあるのですが、TVCではなく、Multi Row INSERTの癖の確認というか、メモリ消費量などの傾向を、肌感覚で覚えておきましょうね。 というネタです。
Oracle Databaseで以下のような表を作成、PostgreSQL/MySQLでも同様に作成しておきます。
create table mrows_ins_tab
(
id integer not null primary key,
col1 varchar2(1000),
col2 varchar2(1000),
col3 varchar2(1000),
col4 varchar2(1000),
col5 varchar2(1000),
col6 varchar2(1000),
col7 varchar2(1000),
col8 varchar2(500)
);
Oracle Databaseの方言、multi table insertの対象を単一表にしてmulti row insertのPGA消費傾向を見る。
行数を変えつつ以下のようなINSERT ALL文にて検証。
SCOTT@localhost:1521/freepdb1> !cat sql_mrows_ins_5000.sql
INSERT ALL
INTO mrows_ins_tab(id, col8) VALUES(1,
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1')
...略...
INTO mrows_ins_tab(id, col8) VALUES(5000,
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx5000')
SELECT * FROM dual;
手始めに5000行をガツンとINSERT ALLにて。この程度の行サイズと行数でも300MB超えのPGA消費ですね。
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.8.0.25.04
に接続されました。
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
39 CPU used by this session 4
39 CPU used when call started 3
...略...
39 session pga memory 4254712
39 session pga memory max 5123744
39 session uga memory 1844408
39 session uga memory max 3053904
...略...
SCOTT@localhost:1521/freepdb1> @sql_mrows_ins_5000
5000行が作成されました。
経過: 00:00:05.95
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
39 CPU used by this session 550
39 CPU used when call started 550
...略...
39 session logical reads 26402
39 session pga memory 88534008
39 session pga memory max 339274744
39 session uga memory 84055376
39 session uga memory max 85103896
...略...
行数を3倍の15,000行に。こんなことする方はいないと思いますけども。。。予想以上にPGAを消費しますね。
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
205 CPU used by this session 5
205 CPU used when call started 4
...略...
205 session pga memory 4123640
205 session pga memory max 5123744
205 session uga memory 1839072
205 session uga memory max 3053904
...略...
SCOTT@localhost:1521/freepdb1> @sql_mrows_ins_15000
15000行が作成されました。
経過: 00:01:45.96
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
205 CPU used by this session 9762
205 CPU used when call started 9762
...略...
205 session pga memory 257551352
205 session pga memory max 1402072056
205 session uga memory 248118456
205 session uga memory max 252312704
...略...
前述のINSERT ALLで 5,000行、15,000行の一括インサートでのPGA/UGAの最大サイズは以下の通りでした。
session pga memory max
- 318.7 MB / 5,000rows
- 1,332.23MB / 15,000rows
session uga memory max
- 78.2 MB / 5,000rows
- 237.71MB / 15,000rows
今回の環境とINSERT ALLの行数、行サイズでは 20,000行で、PGA_AGGREGATE_LIMITを超える結果となりました。
23ai FREEなので使えるメモリサイズが元々少ないので比較的簡単に制限を超過しちゃいますね
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
203 CPU used by this session 5
203 CPU used when call started 4
...略...
203 session pga memory 4254712
203 session pga memory max 5123744
203 session uga memory 1844408
203 session uga memory max 3053904
...略...
SCOTT@localhost:1521/freepdb1> @sql_mrows_ins_20000
INTO mrows_ins_tab(id, col8) VALUES(1,
*
行2でエラーが発生しました。:
ORA-04036: インスタンスまたはPDBにより使用されるPGAメモリーがPGA_AGGREGATE_LIMITを超えています。 ヘルプ:
https://docs.oracle.com/error-help/db/ora-04036/
上記で利用したINSERT文を生成したスクリプトです。参考まで。
set feed off
set timi off
set head off
set termout off
set veri off
set trimspool on
col col1 for a20
col col2 for a20
col col3 for a20
col col4 for a20
col col5 for a20
col col6 for a20
col col7 for a20
col col8 for a20
set linesize 400
set pagesize 1000
SET SERVEROUTPUT ON
spool sql_mrows_ins_&1..sql
DECLARE
c_max_rows CONSTANT NUMBER := &1;
BEGIN
DBMS_OUTPUT.PUT_LINE('INSERT ALL ');
FOR i IN 1..c_max_rows LOOP
DBMS_OUTPUT.PUT_LINE(
'INTO mrows_ins_tab(id, col8) VALUES('
|| TO_CHAR(i)
|| ', ''' || LPAD(TO_CHAR(i),373,'x') || ''')'
);
END LOOP;
DBMS_OUTPUT.PUT_LINE('SELECT * FROM dual;');
END;
/
spool off
SET SERVEROUTPUT OFF
UNDEFINE 1
set head on
set termout on
set feed on
set veri on
set timi on
set trimspool off
ここまでは、Oracle Databaseのmulti table insert(Oracle Databaseの方言)をつかった multi row insertでしたが、
次はPostgreSQLでも実行できるmulti row insert構文で同様の検証を行ってみます!
multi row insertを利用した場合のPGA消費量確認
見ての通り、Multi table insert文より、PGAの消費は緩やかではあるものの、それなりの消費量ですね。
これらの結果から、適当な行数(行サイズにもよるが)、10行〜多くても1000行程度ぐらいの範囲で一括INSERTするのが
性能とメモリ消費ではバランスが良さそうな感じに思えますね。
物理メモリが大量にあってPGAにそれなりに割り振れるとしても、ハードパース時間はかなり伸びですしそれを回避するのは難しいので。
こんな感じのmulti row insert文を生成(PostgreSQLも同じ文を利用できます)。なお、行数は適宜調整。
[oracle@arm64-oraclelinux8u10 ~]$ cat sql_mrows_ins_65535.sql
INSERT INTO mrows_ins_tab(id, col8) VALUES
(1, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1')
...略...
, (65535, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx65535')
;
まずは、5,000行から。
147MB程度のPGA消費なので、INSERT ALLにくらべると半分ぐらいの消費になってますね。
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
203 CPU used by this session 2
203 CPU used when call started 1
...略...
203 session pga memory 3419808
203 session pga memory max 3747488
203 session uga memory 1456416
203 session uga memory max 1769824
...略...
SCOTT@localhost:1521/freepdb1> @sql_mrows_ins_5000
5000行が作成されました。
経過: 00:00:04.91
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
203 CPU used by this session 491
203 CPU used when call started 491
...略...
203 session pga memory 3730424
203 session pga memory max 147647480
203 session uga memory 2297424
203 session uga memory max 4523744
...略...
同様に、3倍の15,000行。
INSERT ALL文と比べPGAの消費量は少なく、行数の割に緩やかに増加しているようですね。興味深い。
410MB程度のPGA消費。INSERT ALLで同様の行数を扱った検証では、1.3GB程度だったので50%以下に抑えられています。
23ai以降で、Multi row insertを行うなら、INSERT ALLは避けるべきですね。
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
39 CPU used by this session 5
39 CPU used when call started 3
...略...
39 session pga memory 4254712
39 session pga memory max 5123744
39 session uga memory 1844408
39 session uga memory max 3053904
...略...
SCOTT@localhost:1521/freepdb1> @sql_mrows_ins_15000
15000行が作成されました。
経過: 00:01:03.97
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
39 CPU used by this session 6381
39 CPU used when call started 6381
...略...
39 session pga memory 11660280
39 session pga memory max 412019704
39 session uga memory 4589264
39 session uga memory max 11204640
...略...
次のケース。
INSERT ALLでは、PGA_AGGREGATE_LIMITの制限サイズを超過してしまいましたが、PGA消費はおさえられ、本環境でも正常に処理されますね。ほう!
まだ、行けますね。
とはいえ、処理時間も随分長くなってます。これTVC同様ハードパース時間の影響が大きそうですよね。
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
38 CPU used by this session 5
38 CPU used when call started 3
...略...
38 session pga memory 4254712
38 session pga memory max 5123744
38 session uga memory 1844408
38 session uga memory max 3053904
...略...
SCOTT@localhost:1521/freepdb1> @sql_mrows_ins_20000
20000行が作成されました。
経過: 00:02:18.09
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
38 CPU used by this session 13538
38 CPU used when call started 13538
...略...
38 session pga memory 7007224
38 session pga memory max 550956024
38 session uga memory 5571464
38 session uga memory max 14349248
...略...
では、思い切って、50,000行にしてみましょう! なんとなくギリギリな感じですが、正常終了!
1,359MBほど使っちゃってますね。
この傾向、Table Value Constructorの傾向に近いですよね。はやり。
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
40 CPU used by this session 5
40 CPU used when call started 3
...略...
40 session pga memory 4254712
40 session pga memory max 5123744
40 session uga memory 1844408
40 session uga memory max 3053904
...略...
SCOTT@localhost:1521/freepdb1> @sql_mrows_ins_50000
50000行が作成されました。
経過: 00:29:08.74
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
40 CPU used by this session 173596
40 CPU used when call started 173596
...略...
40 session pga memory 31714296
40 session pga memory max 1359735800
40 session uga memory 11073624
40 session uga memory max 33220312
...略...
Table Value Constractorの傾向に類似しているので、行数上限がありそうだと思い。試してみた!
想像通り!!!!! エラーメッセージも同じです!!
SCOTT@localhost:1521/freepdb1> @show_mystats.sql
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
38 CPU used by this session 5
38 CPU used when call started 4
...略...
38 session pga memory 4254712
38 session pga memory max 5123744
38 session uga memory 1844408
38 session uga memory max 3053904
...略...
SCOTT@localhost:1521/freepdb1> @sql_mrows_ins_65535
INSERT INTO mrows_ins_tab(id, col8) VALUES
*
行1でエラーが発生しました。:
ORA-63805: 表値コンストラクタのタプルの最大数を超えました ヘルプ:
https://docs.oracle.com/error-help/db/ora-63805/
経過: 00:00:01.07
上記で利用したINSERT文を生成したスクリプトです。参考まで。
Oracle Database 23ai以降で利用できるMulti row insert文を生成するスクリプトは以下のとおり。
set feed off
set timi off
set head off
set termout off
set veri off
set trimspool on
col col1 for a20
col col2 for a20
col col3 for a20
col col4 for a20
col col5 for a20
col col6 for a20
col col7 for a20
col col8 for a20
set linesize 400
set pagesize 1000
SET SERVEROUTPUT ON
spool sql_mrows_ins_&1..sql
DECLARE
c_max_rows CONSTANT NUMBER := &1;
BEGIN
DBMS_OUTPUT.PUT_LINE('INSERT INTO mrows_ins_tab(id, col8) VALUES');
FOR i IN 1..c_max_rows LOOP
DBMS_OUTPUT.PUT_LINE(
CASE WHEN i > 1
THEN ', '
END
|| '('
|| TO_CHAR(i)
|| ', ''' || LPAD(TO_CHAR(i),373,'x') || ''')'
);
END LOOP;
DBMS_OUTPUT.PUT_LINE(';');
END;
/
spool off
SET SERVEROUTPUT OFF
UNDEFINE 1
set head on
set termout on
set feed on
set veri on
set timi on
set trimspool off
では、同様の方法で、PostgreSQL/MySQLのざっくりとしたメモリ消費などを確認しておきましょう。
次は、PostgreSQL
PostgreSQL、メモリ構造がOracle Databaseとは違うといっても、65535行登録で、302MB程度。随分違う。
とはいっても行数が多くなれば消費量は増えると思われ、Oracle Database同様、詰めすぎず、性能とメモリ消費のバランスが取れる単位にまとめるってのは、同じだろうと思います。
Password for user scott:
psql (17.7)
Type "help" for help.
...略...
perftestdb=> \d+ mrows_ins_tab
Table "scott.mrows_ins_tab"
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
--------+-------------------------+-----------+----------+---------+----------+-------------+--------------+-------------
id | integer | | not null | | plain | | |
col1 | character varying(1000) | | | | extended | | |
col2 | character varying(1000) | | | | extended | | |
col3 | character varying(1000) | | | | extended | | |
col4 | character varying(1000) | | | | extended | | |
col5 | character varying(1000) | | | | extended | | |
col6 | character varying(1000) | | | | extended | | |
col7 | character varying(1000) | | | | extended | | |
col8 | character varying(500) | | | | extended | | |
Indexes:
"mrows_ins_tab_pkey" PRIMARY KEY, btree (id)
Access method: heap
2026-01-07 20:45:03.765 JST [14222] LOG: PARSER STATISTICS
2026-01-07 20:45:03.765 JST [14222] DETAIL: ! system usage stats:
! 0.063931 s user, 0.000000 s system, 0.069344 s elapsed
! [0.063931 s user, 0.008076 s system total]
! 114684 kB max resident size
! 0/0 [0/0] filesystem blocks in/out
! 0/4816 [12/5839] page faults/reclaims, 0 [0] swaps
! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent
! 0/0 [6/0] voluntary/involuntary context switches
2026-01-07 20:45:03.765 JST [14222] STATEMENT: INSERT INTO mrows_ins_tab(id, col8) VALUES
(1, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1')
, (2,
...略...
, (65535, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx65535')
;
2026-01-07 20:45:03.853 JST [14222] LOG: PARSE ANALYSIS STATISTICS
2026-01-07 20:45:03.853 JST [14222] DETAIL: ! system usage stats:
! 0.017787 s user, 0.000000 s system, 0.019316 s elapsed
! [0.144499 s user, 0.008076 s system total]
! 166148 kB max resident size
! 0/0 [0/0] filesystem blocks in/out
! 44/3185 [56/11332] page faults/reclaims, 0 [0] swaps
! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent
! 0/0 [120/0] voluntary/involuntary context switches
2026-01-07 20:45:03.853 JST [14222] STATEMENT: INSERT INTO mrows_ins_tab(id, col8) VALUES
...略...
2026-01-07 20:45:03.922 JST [14222] LOG: REWRITER STATISTICS
2026-01-07 20:45:03.922 JST [14222] DETAIL: ! system usage stats:
! 0.001438 s user, 0.000081 s system, 0.001645 s elapsed
! [0.203669 s user, 0.011451 s system total]
! 209480 kB max resident size
! 0/0 [0/0] filesystem blocks in/out
! 0/1 [56/13938] page faults/reclaims, 0 [0] swaps
! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent
! 0/0 [234/1] voluntary/involuntary context switches
2026-01-07 20:45:03.922 JST [14222] STATEMENT: INSERT INTO mrows_ins_tab(id, col8) VALUES
...略...
2026-01-07 20:45:04.183 JST [14222] LOG: PLANNER STATISTICS
2026-01-07 20:45:04.183 JST [14222] DETAIL: ! system usage stats:
! 0.176192 s user, 0.003606 s system, 0.195045 s elapsed
! [0.436538 s user, 0.018692 s system total]
! 235792 kB max resident size
! 0/0 [0/0] filesystem blocks in/out
! 2/3555 [58/17991] page faults/reclaims, 0 [0] swaps
! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent
! 0/1 [338/2] voluntary/involuntary context switches
2026-01-07 20:45:04.183 JST [14222] STATEMENT: INSERT INTO mrows_ins_tab(id, col8) VALUES
...略...
2026-01-07 20:45:04.346 JST [14222] LOG: XECUTOR STATISTICS
2026-01-07 20:45:04.346 JST [14222] DETAIL: ! system usage stats:
! 0.050664 s user, 0.022169 s system, 0.093750 s elapsed
! [0.542249 s user, 0.048167 s system total]
! 302548 kB max resident size
! 0/91376 [0/91376] filesystem blocks in/out
! 7272/5528 [7330/25997] page faults/reclaims, 0 [0] swaps
! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent
! 17/2 [474/4] voluntary/involuntary context switches
2026-01-07 20:45:04.346 JST [14222] STATEMENT: INSERT INTO mrows_ins_tab(id, col8) VALUES
...略...
最後に、MySQL
MySQLでは列値コンストラクタが必要なこと以外、Oracle Database/PostgreSQLと同じです。
[oracle@arm64-oraclelinux8u10 ~]$ cat sql_mrows_ins_65535_mysql.sql
INSERT INTO mrows_ins_tab(id, col8) VALUES
ROW(1, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1')
...略...
, ROW(65535, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx65535')
;
MySQLもPostgreSQL同様、Oracle Databaseのような行数上限は無いですが、メモリ消費はそれなりにありますね。
やはり注意しておきたい部分ではありますね。無邪気に詰め込みすぎないのがリーズナブルだと思います。
65535行で、263MBぐらい。
[master@Oracle-Linux-8u10-arm64-2 ~]$ mysql -u scott -D perftestdb -p -h localhost
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.4.7 MySQL Community Server - GPL
...略...
mysql> desc mrows_ins_tab;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| col1 | varchar(1000) | YES | | NULL | |
| col2 | varchar(1000) | YES | | NULL | |
| col3 | varchar(1000) | YES | | NULL | |
| col4 | varchar(1000) | YES | | NULL | |
| col5 | varchar(1000) | YES | | NULL | |
| col6 | varchar(1000) | YES | | NULL | |
| col7 | varchar(1000) | YES | | NULL | |
| col8 | varchar(500) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
9 rows in set (0.00 sec)
mysql> SELECT * from performance_schema.users WHERE USER='scott';
+-------+---------------------+-------------------+-------------------------------+--------------------------+
| USER | CURRENT_CONNECTIONS | TOTAL_CONNECTIONS | MAX_SESSION_CONTROLLED_MEMORY | MAX_SESSION_TOTAL_MEMORY |
+-------+---------------------+-------------------+-------------------------------+--------------------------+
| scott | 1 | 1 | 1465424 | 2914540 |
+-------+---------------------+-------------------+-------------------------------+--------------------------+
1 row in set (0.00 sec)
mysql> SELECT MAX_TOTAL_MEMORY from performance_schema.events_statements_history WHERE SQL_TEXT LIKE 'INSERT INTO mrows_ins_tab(id, col8) VALUES%';
Empty set (0.00 sec)
mysql> \. sql_mrows_ins_65535_mysql.sql
Query OK, 65535 rows affected (0.59 sec)
Records: 65535 Duplicates: 0 Warnings: 0
mysql> SELECT MAX_TOTAL_MEMORY from performance_schema.events_statements_history WHERE SQL_TEXT LIKE 'INSERT INTO mrows_ins_tab(id, col8) VALUES%';
+------------------+
| MAX_TOTAL_MEMORY |
+------------------+
| 263061721 |
+------------------+
1 row in set (0.00 sec)
mysql> SELECT * from performance_schema.users WHERE USER='scott';
+-------+---------------------+-------------------+-------------------------------+--------------------------+
| USER | CURRENT_CONNECTIONS | TOTAL_CONNECTIONS | MAX_SESSION_CONTROLLED_MEMORY | MAX_SESSION_TOTAL_MEMORY |
+-------+---------------------+-------------------+-------------------------------+--------------------------+
| scott | 1 | 1 | 235981664 | 263061721 |
+-------+---------------------+-------------------+-------------------------------+--------------------------+
1 row in set (0.00 sec)
では、また。
デスクワークだと日中動かないので、手の部分がやたら冷える。。。
軽くBeat Saberで体動かすと、一時的には温まるのだけどもw
冬らしい、寒さの、東京より。
関連エントリー
・標準はあるにはあるが癖の多いSQL 全部俺 #1 Pagination
・標準はあるにはあるが癖の多いSQL 全部俺 #2 関数名は同じでも引数が逆の罠!
・標準はあるにはあるが癖の多いSQL 全部俺 #3 データ型確認したい時あるんです
・標準はあるにはあるが癖の多いSQL 全部俺 #4 リテラル値での除算の内部精度も違うのよ!
・標準はあるにはあるが癖の多いSQL 全部俺 #5 和暦変換機能ある方が少数派
・標準はあるにはあるが癖の多いSQL 全部俺 #6 時間厳守!
・標準はあるにはあるが癖の多いSQL 全部俺 #7 期間リテラル!
・標準はあるにはあるが癖の多いSQL 全部俺 #8 翌月末日って何日?
・標準はあるにはあるが癖の多いSQL 全部俺 #9 部分文字列の扱いでも癖が出る><
・標準はあるにはあるが癖の多いSQL 全部俺 #10 文字列連結の罠(有名なやつ)
・標準はあるにはあるが癖の多いSQL 全部俺 #11 デュエル、じゃなくて、デュアル
・標準はあるにはあるが癖の多いSQL 全部俺 #12 文字[列]探すにも癖がある
・標準はあるにはあるが癖の多いSQL 全部俺 #13 あると便利ですが意外となかったり
・標準はあるにはあるが癖の多いSQL 全部俺 #14 連番の集合を返すにも癖がある
・標準はあるにはあるが癖の多いSQL 全部俺 #15 SQL command line client
・標準はあるにはあるが癖の多いSQL 全部俺 #16 SQLのレントゲンを撮る方法
・標準はあるにはあるが癖の多いSQL 全部俺 #17 その空白は許されないのか?
・標準はあるにはあるが癖の多いSQL 全部俺 #18 (+)の外部結合は方言
・標準はあるにはあるが癖の多いSQL 全部俺 #19 帰ってきた、部分文字列の扱いでも癖w
・標準はあるにはあるが癖の多いSQL 全部俺 #20 結果セットを単一列に連結するにも癖がある
・標準はあるにはあるが癖の多いSQL 全部俺 #21 演算結果にも癖がある
・標準はあるにはあるが癖の多いSQL 全部俺 #22 集合演算にも癖がある
・標準はあるにはあるが癖の多いSQL 全部俺 #23 複数行INSERTにも癖がある
・標準はあるにはあるが癖の多いSQL 全部俺 #24 乱数作るにも癖がある
・標準はあるにはあるが癖の多いSQL 全部俺 #25 SQL de Fractalsにも癖がある:)
・標準はあるにはあるが癖の多いSQL 全部俺 おまけ SQL de 湯婆婆やるにも癖がでるw
・帰ってきた! 標準はあるにはあるが癖の多いSQL #1 SQL de ROT13 やるにも癖が出るw
・帰ってきた! 標準はあるにはあるが癖の多いSQL #2 Actual Plan取得中のキャンセルでも癖が出る
・帰ってきた! 標準はあるにはあるが癖の多いSQL #3 オプティマイザの結合順評価テーブル数上限にも癖が出る
・帰ってきた! 標準はあるにはあるが癖の多いSQL #4 Optimizer Traceの取得でも癖がでる
・帰ってきた! 標準はあるにはあるが癖の多いSQL #5 - Optimizer Hint でも癖が多い
・帰ってきた! 標準はあるにはあるが癖の多いSQL #6 - Hash Joinの結合ツリーにも癖がでる
・帰ってきた! 標準はあるにはあるが癖の多いSQL #7 - Hash Joinの実行計画にも癖がでる
・帰ってきた! 標準はあるにはあるが癖の多いSQL #8 - Hash Joinさせるにも癖が出る
・帰ってきた! 標準はあるにはあるが癖の多いSQL #9、BOOLEAN型にも癖が出る
・帰ってきた! 標準はあるにはあるが癖の多いSQL #10、BOOLEAN型にも癖が出る(後編)
・帰ってきた! 標準はあるにはあるが癖の多いSQL #10、BOOLEAN型にも癖が出る(後編)の おまけ - SQL*PlusのautotraceでSQL Analysis Reportが出力される! (23ai〜)
・帰ってきた! 標準はあるにはあるが癖の多いSQL #11 - 引用符にも癖がでるし、NULLのソート構文にも癖がある!(前編)
・帰ってきた! 標準はあるにはあるが癖の多いSQL #12 - 引用符にも癖がでるし、NULLのソート構文にも癖がある!(後編)ー 列エイリアスの扱いにも癖がある!
・帰ってきた! 標準はあるにはあるが癖の多いSQL #13 - コメント書くにも癖がある
・帰ってきた! 標準はあるにはあるが癖の多いSQL #14 - コメントを書く位置にも癖がでる (SQL Clientにも癖がある)
・帰ってきた! 標準はあるにはあるが癖の多いSQL #15 - 実行計画でスカラー副問合せの見せ方にも癖がでる
・帰ってきた! 標準はあるにはあるが癖の多いSQL #16 - FROM句のインラインビューのエイリアスにもクセがある(必須だったり、任意だったり)
・帰ってきた! 標準はあるにはあるが癖の多いSQL #17 - ANY_VALUE() ってなかなかいいじゃん、癖無さそう!
・帰ってきた! 標準はあるにはあるが癖の多いSQL #18 - t_alias と c_alias にも癖が出る
・帰ってきた! 標準はあるにはあるが癖の多いSQL #19 - c_alias の癖(おまけ)
・帰ってきた! 標準はあるにはあるが癖の多いSQL #20 - Table Value Constructer (TVC)
・帰ってきた! 標準はあるにはあるが癖の多いSQL #21 - Table Value Constructer(TVC)- ハードパース時間とメモリ消費量 / BONUS TRACK
| 固定リンク | 0


コメント