Articles

TiDBのLONGTEXTはデフォルトだと4GB格納できない

v8.5のTiDBで利用できるLONGTEXTは型は最大長では4GB格納できますが、txn-entry-size-limitという設定により6MiB以下のデータしか保存できないようになっています。

https://docs.pingcap.com/ja/tidb/stable/data-type-string

LONGTEXT

LONGTEXT型はTEXTタイプ型と似ています。違いは、 LONGTEXTの最大列長が 4,294,967,295 である点です。ただし、 txn-entry-size-limitの制限により、TiDB の単一行の最大storageサイズはデフォルトで 6 MiB となり、設定を変更することで 120 MiB まで増やすことができます。

LONGTEXT [CHARACTERSET charset_name] [COLLATE collation_name]

変更すればいいのですが、割と地雷ですね、、、

ちなみにMEDIUMTEXT, MEDIUMBLOB, LONGBLOB型についても同様にこの制約に引っかかります。

要注意ですね、、

(追記) txn-entry-size-limitを変更する場合、TiKV側のraft-entry-max-sizeも同様に変える必要があるようです。TiDBとしてOKだとしてもTiKVとしてNGでデータ更新に失敗するというわけですね。

https://docs.pingcap.com/tidb/stable/tidb-configuration-file/#txn-entry-size-limit-new-in-v4010-and-v500:~:text=item%2E-,Note,time

Note that TiKV has a similar limit. If the data size of a single write request exceeds raft-entry-max-size, which is 8 MB by default, TiKV refuses to process this request. When a table has a row of large size, you need to modify both configurations at the same time.