自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL修改表結(jié)構(gòu)時(shí)的拷貝問題

數(shù)據(jù)庫 MySQL
下文對MySQL修改表結(jié)構(gòu)時(shí)的拷貝時(shí)間問題進(jìn)行了測試分析,如果您在此方面也遇到過類似的問題,不妨一看,相信對您會有所啟迪。

MySQL修改表結(jié)構(gòu)時(shí)難免會出現(xiàn)問題,而MySQL修改表結(jié)構(gòu)時(shí)拷貝的時(shí)間嚴(yán)重影響了MySQL修改表結(jié)構(gòu)的操作,下面就對該問題進(jìn)行分析。

mysql數(shù)據(jù)庫里,對一個(gè)已創(chuàng)建的表進(jìn)行DDL操作,比如說添加一個(gè)字段。在做測試時(shí),發(fā)現(xiàn)ddl操作的時(shí)間特別的長。oracle里,通常情況下只是修改數(shù)據(jù)字典就可以了,操作時(shí)間非常的短,阻塞DML的時(shí)間也比較短。mysql數(shù)據(jù)庫對表進(jìn)行ddl操作跟oracle數(shù)據(jù)庫有很大的不同,它先要把原表拷貝一份到臨時(shí)表,這期間不阻塞select,阻塞所有的更改操作(update,delete,insert),對臨時(shí)表ddl操作完成,刪除原表,重命名臨時(shí)表。
如果一張比較大的表進(jìn)行ddl變更,比如說40G,那拷貝的時(shí)間讓人無法忍受,并且阻塞所有的DML操作,讓業(yè)務(wù)無法繼續(xù)。

以下是測試過程:

  1. [coolcode]  
  2. mysql> desc t1;  
  3. +————–+————-+——+—–+———+——-+  
  4. | Field | Type | Null | Key | Default | Extra |  
  5. +————–+————-+——+—–+———+——-+  
  6. | id | int(11) | YES | MUL | NULL | |  
  7. | nick | varchar(32) | YES | | NULL | |  
  8. | email | varchar(32) | YES | | NULL | |  
  9. | gmt_create | datetime | YES | | NULL | |  
  10. | gmt_modified | datetime | YES | | NULL | |  
  11. +————–+————-+——+—–+———+——-+  
  12. mysql> select count(*) from t1;  
  13. +———-+  
  14. | count(*) |  
  15. +———-+  
  16. | 2228017 |  
  17. +———-+  
  18. 1 row in set (1.78 sec)  
  19. [/coolcode]  
  20. 現(xiàn)在對它進(jìn)行表結(jié)構(gòu)變更,增加一列:  
  21. [coolcode]  
  22. mysql> alter table t1 add(tel varchar(20));  
  23. Query OK, 2304923 rows affected (41.03 sec)  
  24. Records: 2304923 Duplicates: 0 Warnings: 0  
  25. [/coolcode]  
  26. 在上述表結(jié)構(gòu)變更過程中,啟動另外一個(gè)會話,進(jìn)行select查詢操作和一個(gè)更新操作:  
  27. [coolcode]  
  28. mysql> select count(*) from t1;  
  29. +———-+  
  30. | count(*) |  
  31. +———-+  
  32. | 2304923 |  
  33. +———-+  
  34. 1 row in set (2.10 sec)  
  35.  
  36. mysql> select * from t1 limit 10;  
  37. +——+——-+——————+———————+———————+  
  38. | id | nick | email | gmt_create | gmt_modified |  
  39. +——+——-+——————+———————+———————+  
  40. | 0 | nick0 | nick0@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |  
  41. | 1 | nick1 | nick1@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |  
  42. | 2 | nick2 | nick2@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |  
  43. | 3 | nick3 | nick3@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |  
  44. | 4 | nick4 | nick4@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |  
  45. | 5 | nick5 | nick5@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |  
  46. | 6 | nick6 | nick6@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |  
  47. | 7 | nick7 | nick7@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |  
  48. | 8 | nick8 | nick8@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |  
  49. | 9 | nick9 | nick9@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |  
  50. +——+——-+——————+———————+———————+  
  51. 10 rows in set (0.00 sec)  
  52.  
  53. mysql> update t1 set nick=’test_nick’ where id=1;  
  54. Query OK, 4 rows affected (43.89 sec) –這里是阻塞的時(shí)間  
  55. Rows matched: 4 Changed: 4 Warnings: 0  
  56. [/coolcode]  
  57.  

通過以上實(shí)驗(yàn)可以看出,對表進(jìn)行ddl操作時(shí),mysql并不阻塞select查詢,但會嚴(yán)重阻塞dml操作。另外,如果你要對表進(jìn)行ddl操作,由于有一個(gè)拷貝操作,你要計(jì)算好你的可用空間夠不夠?如果你的系統(tǒng)經(jīng)常要進(jìn)行MySQL修改表結(jié)構(gòu),那么你將不得不要考慮此問題!
 

 

 

【編輯推薦】

10大常用MySQL命令行

通過MySQL命令行增加新用戶

通過索引優(yōu)化MySQL語句的實(shí)例

MySQL權(quán)限表的介紹

授予MySQL用戶權(quán)限的實(shí)例

責(zé)任編輯:段燃 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-11-23 09:13:47

mysql修改表結(jié)構(gòu)

2010-10-13 10:42:14

MySQL修改表結(jié)構(gòu)

2010-10-08 09:38:42

mysql修改表

2010-10-13 10:03:08

MySQL修改表結(jié)構(gòu)

2010-05-18 18:19:40

MySQL修改表結(jié)構(gòu)

2010-10-13 10:27:35

MySQL修改表結(jié)構(gòu)

2010-11-24 09:56:20

mysql拷貝表

2010-10-13 09:37:48

MYSQL修改表結(jié)構(gòu)

2010-10-19 16:20:32

SQL SERVER表

2010-05-18 09:48:55

MYSQL命令

2010-11-15 13:00:12

Oracle修改表結(jié)構(gòu)

2010-11-23 13:24:16

MySQL MyISA

2010-10-15 10:29:25

Mysql表結(jié)構(gòu)

2010-11-23 12:39:05

MySQL InnoD

2010-09-16 16:29:15

sql server表

2010-09-25 15:49:07

SQL修改

2021-01-08 06:15:09

深拷貝淺拷貝寫時(shí)拷貝

2010-09-02 09:51:24

SQL刪除

2010-05-21 10:14:10

MySQL更改表結(jié)構(gòu)

2010-05-18 16:29:44

MySQL修改表
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號