中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么解決MySQL中的ERROR 1799報錯問題

發布時間:2021-11-18 14:25:01 來源:億速云 閱讀:376 作者:iii 欄目:MySQL數據庫

這篇文章主要介紹“怎么解決MySQL中的ERROR 1799報錯問題”,在日常操作中,相信很多人在怎么解決MySQL中的ERROR 1799報錯問題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么解決MySQL中的ERROR 1799報錯問題”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

【問題描述】:
版本:MySQL 5.6.36 (以上的版本都可能出現)
行為:對某些訪問頻繁的大表做Online DDL
現象:
ERROR 1799 (HY000): Creating index 'GEN_CLUST_INDEX' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.

比如:

  1. mysql> ALTER TABLE a ENGINE=innodb;

  2. ERROR 1799 (HY000): Creating index 'GEN_CLUST_INDEX' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.


  3. mysql> ALTER TABLE a DROP idx_name;

  4. ERROR 1799 (HY000): Creating index 'idx' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.

只要是DDL相關的,就可能遇到這樣的問題,比如在optimize table時:

  1. mysql> OPTIMIZE TABLE a;

  2. +--------+----------+----------+-------------------------------------------------------------------+

  3. | Table  | Op            | Msg_type | Msg_text                                                                                                                   |

  4. +--------+----------+----------+-------------------------------------------------------------------+

  5. | test.a | optimize | note         | Table does not support optimize, doing recreate + analyze instead |

  6. | test.a | optimize | error    | Creating index 'FTS_DOC_ID_INDEX' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again. |

  7. | test.a | optimize | status   | OK                                                                                                                               |

  8. +--------+----------+----------+-------------------------------------------------------------------+

  9. 2 rows in set (18.13 sec)

雖然optimize對innodb表沒什么用,但是仍然會拋出該錯誤

那么查看一下手冊,可以得知:
innodb_online_alter_log_max_size控制在用于在Online DDL操作時的一個臨時的日志文件的上限值大小。
該臨時的日志文件存儲了在DDL時間內,dml操作的記錄。這個臨時的日志文件依照innodb_sort_buffer_size的值做擴展。
如果該日志超過了innodb_online_alter_log_max_size的最大上限,DDL操作則會拋出失敗,并且回滾所有未提交的DML操作。
反過來說,該值如果設置更高,則可以允許在做Online DDL時,有更多的DML操作發生。
但因此帶來的問題就是,在DDL做完之后,需要更多時間來鎖表和應用這些日志。


另外對于某些DDL操作,比如
ADD INDEX/COLUMN,則可以通過調整innodb_sort_buffer_size的大小來加快操作速度。
但是實際上分配的內存為3倍的innodb_sort_buffer_size值。

innodb_online_alter_log_max_size和innodb_sort_buffer_size均為5.6 Online DDL的新參數。

【解決方案】:

知道這個參數控制的是什么東西,就好解決了。
臨時調大該值,此處改成了256MB:

  1. mysql> SET GLOBAL innodb_online_alter_log_max_size=256*1024*1024;

  2. Query OK, 0 rows affected (0.03 sec)

該值默認為128MB,還是建議在做完DDL之后再將其改為默認值,也就是134217728。

到此,關于“怎么解決MySQL中的ERROR 1799報錯問題”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安阳县| 山阴县| 稷山县| 嵊泗县| 新龙县| 云安县| 连平县| 延边| 盐边县| 包头市| 平凉市| 阳西县| 天祝| 彝良县| 哈尔滨市| 色达县| 永德县| 兴隆县| 安阳县| 济宁市| 都江堰市| 祁连县| 呼图壁县| 隆子县| 永平县| 宜宾县| 荔浦县| 新建县| 山阴县| 德格县| 涟水县| 水城县| 新巴尔虎左旗| 滨海县| 小金县| 武城县| 建平县| 景洪市| 宣城市| 怀集县| 师宗县|