SQL文の最大長

(8.0.29)

max_allowed_packet

show variables like 'max_allowed_packet';

デフォルト = 67108864 = 64MB

最大値 = 1073741824 = 1GB

 

(19c)
https://docs.oracle.com/cd/F19136_01/refrn/database-limits.html#GUID-ED26F826-DB40-433F-9C2C-8C63A46A3BFE
https://docs.oracle.com/cd/F19136_01/sqpug/SQL-Plus-limits.html#GUID-93CA1BD6-888F-40FD-B57F-0B782C96854F

 


調べた限り上限はない模様。

SQL*Plusにはコマンドラインの長さ5000文字の制限があるので、制限を超えないように改行を入れる必要がある

 

大きなサイズのSQL文を作成し確認
(サーバ設定: CPU4コア、メモリ8G)


: > a.sql

echo "select 11111111111111111111 from tab1" >> a.sql
echo "where 11111111111111111111 = 11111111111111111111" >> a.sql
for i in `seq 1 500000`; do
  echo "and 11111111111111111111 = 11111111111111111111"
done >> a.sql

echo "and 11111111111111111111 = 11111111111111111111;" >> a.sql


du -sh a.sql

sqlplus test/test@pdb1

alter system set pga_aggregate_limit = 6G;
alter system set pga_aggregate_target = 2G;
show parameter pga


set feed only
set time on
set timing on
@a.sql


8M -> 実行可能
経過: 00:00:01.07


32M -> 異常終了
ORA-07445: 例外が検出されました

 

(14)
https://www.postgresql.jp/document/14/html/limits.html

調べた限り上限はない模様。


大きなサイズのSQL文を作成し確認
(サーバ設定: CPU4コア、メモリ8G)

: > a.sql

echo "select 11111111111111111111 from tab1" >> a.sql
echo "where 11111111111111111111 = 11111111111111111111" >> a.sql
for i in `seq 1 10000000`; do
  echo "and 11111111111111111111 = 11111111111111111111"
done >> a.sql

echo "and 11111111111111111111 = 11111111111111111111;" >> a.sql


du -sh a.sql

 

psql test

show work_mem;
set work_mem = '2GB';
show work_mem;


\o /dev/null
\timing 1
\i a.sql

64M -> 実行可能
時間: 160976.753 ミリ秒(02:40.977)

256M -> 実行可能
時間: 7499601.613 ミリ秒 (02:04:59.602)

512M -> 異常終了

2022-08-15 00:51:28.886 JST [1181] LOG:  server process (PID 4154) was terminated by signal 9: Killed
2022-08-15 00:51:28.888 JST [1181] LOG:  terminating any other active server processes
2022-08-15 00:51:28.986 JST [1181] LOG:  all server processes terminated; reinitializing

 

 

 

(2019)

https://docs.microsoft.com/ja-jp/sql/sql-server/maximum-capacity-specifications-for-sql-server?redirectedfrom=MSDN&view=sql-server-ver15
https://support.microsoft.com/en-us/topic/issues-to-consider-when-changing-the-default-value-of-network-packet-size-for-sql-server-connections-8d36675c-0c00-9dac-16e6-b70bb1f2d4c0#:~:text=The%20default%20packet%20size%20set%20by%20Microsoft%20SQL%20Server%20is%204%2C096%20bytes.


Transact-SQLのバイト長 = 65,536 * (表形式データ ストリーム (TDS) パケットのサイズ)


既定のネットワーク パケットのサイズは 4 KB
network packet size 構成オプションによって制御されます

既定のSQL最大長は256MB


sp_configure 'show advanced options', 1;
go
reconfigure;
go
sp_configure 'network packet size (B)';
go

network packet size 構成オプションの最大値は32767バイトのため、
設定できるSQL最大長は約2GB