2014-10-29 50 views
4

MySQL 5.6聲稱DDL操作將以最大可能的併發性運行。 http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html在MySQL 5.6「Alter Table Add Columns」中,不允許DML併發

「允許並行DML?」列顯示哪些操作可以在線完全執行;首選值是「是」。您可以指定LOCK = NONE來聲明在DDL期間允許完全併發,但是如果可能,MySQL會自動允許這種併發級別。當允許併發DML時,也總是允許併發查詢。

但是我剛剛嘗試了一個「ALTER TABLE ADD COLUMN ...」語句,並且在此操作過程中該表出現鎖定。 當我重新聲明並添加「,ALGORITHM = inplace,LOCK = none」時,它花費更長時間,但表格仍然可用。我認爲MySQL會爲特定語句使用最高級別的併發性,爲什麼我必須明確指定它們?

回答

3

聯機DDL 允許併發DML的事實並不一定意味着默認情況下需要每個機會都這樣做。

有關「允許這種級別的併發性」的語言有點難以解釋。你可能會認爲MySQL 總是在可能的情況下使用就地算法,但反過來想一想:它確實意味着當它不可能時它不允許就地算法。如果就地DDL是可能的,它允許它,但實際上並沒有使用該算法,除非你請求它。

您發現自己在線DDL速度較慢。使用更快的方法是不是合理的默認方式(因爲大多數人希望事情變得更快)?畢竟,表格可能足夠小,以至於非內置的ALTER將花費不到1秒的時間,所以它不是一箇中斷。在可能的情況下,在所有情況下啓用ALTER ALTER,會使它們在默認情況下需要更長的時間