Mariadb

如何在執行時間小於 max_statement_time 值的 mariadb 中插入大數據

  • April 1, 2022

我有一些具有這種結構的表。

CREATE TABLE `trcdmppdetail` (
 `mpp_code` varchar(50) NOT NULL,
 `company_code` varchar(50) NOT NULL,
 `mppdetail_date` datetime(3) NOT NULL,
 `position_id` int(11) DEFAULT NULL,
 `basedon_code_1` varchar(50) NOT NULL,
 `basedon_code_2` varchar(50) NOT NULL,
 `mpp_emp` int(11) DEFAULT NULL,
 `actualemp_onrequest` int(11) DEFAULT NULL,
 `dept_id` int(11) NOT NULL,
 `created_date` datetime(3) DEFAULT NULL,
 `created_by` varchar(50) DEFAULT NULL,
 `modified_date` datetime(3) DEFAULT NULL,
 `modified_by` varchar(50) DEFAULT NULL,
 PRIMARY KEY (`mpp_code`,`company_code`,`mppdetail_date`,`basedon_code_1`,`basedon_code_2`,`dept_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `ENCRYPTED`=YES `ENCRYPTION_KEY_ID`=3488

和全域變數的值max_statement_time=60

我在那個表上插入了 50k 行數據,但我得到了錯誤,因為我的查詢執行超過了max_statement_time 我的 dba 不能讓我更改全域變數,max_statement_time=0因為他說會破壞伺服器。

那麼如何插入執行時間小於max_statement_time值的數據。

不要更改GLOBAL設置;更改SESSION設置。

一個解決方案可能是將您的INSERT語句拆分為多個語句。

假設您正在使用mariadb-dump或使用該語句mysqldump創建文件,您可以使用該標誌創建一個轉儲文件,其中包含表中的每行一個。雖然這將比單個語句導入更慢,但它不會遇到變數問題。INSERT``--skip-extended-insert``INSERT``max_statement_time

 mysqldump --skip-extended-insert yourdatabase trcdmppdetail

如果INSERT語句來自應用程序,那麼我能想到的唯一方法是使用沒有max_statement_time限制的中間 MariaDB 伺服器。mysqldump如上所述使用從中介創建轉儲文件,您可以將其導入問題中的 MariaDB 伺服器。(安裝 MariaDB 伺服器很容易- 例如,它可以安裝在任何主要作業系統的筆記型電腦上,50K 行完全沒有問題。)

引用自:https://dba.stackexchange.com/questions/273672