Mysql與tidb測試數據爲8000萬行。mysql
一、修改一個字段的列名,好比將「ctime」修改成「cctime」。sql
Tidb測試:數據庫
MySQL測試:app
二、同一屬性之間切換,即修改一個字段的屬性大小。好比將int類型修改成bigint類型性能
Tidb:測試
Mysql:大數據
MySQL是建立臨時表的方式來加字段,所以這個時間花費已超過40分鐘,因此中止了操做。spa
總結:同一個屬性之間切換時,能夠對比出來,tidb花費的時間是極少的,在8000萬行的數據時依然能表現出極好的性能,可是同比之下MySQL的表現極差,花費時間太長。blog
三、不一樣屬性之間切換,即修改一個字段的屬性爲其餘屬性,好比將int類型修改成varchar類型索引
Tidb:
能夠看出來tidb暫時不支持此種語法。
MySQL
MySQL是支持此語法的。
可是上面的這個例子中,test這個表只有一行數據,因此很快就修改了。若是對於大數據集下,好比co2這個表,有8000萬行數據,那麼此時MySQL在修改列屬性花費的時間很是長。
總結:此時能夠查看tidb的官方說明書。
四、上面的三個例子中,咱們修改的是非索引的列,在接下來的例子中,咱們修改一個索引列嘗試一下,將trace_app_id修改成trace_app_idd。
Tidb:
MySQL:
mysql修改字段時間過長,這裏終止了
五、將trace_app_idd的屬性範圍修改大一些,好比將varchar(200)修改成varchar(300)。
Tidb:
MySQL:
mysql修改字段時間過長,這裏終止了
六、在原表基礎上增長一個列。
Tidb:
MySQL:
mysql修改字段時間過長,這裏終止了
七、在原表基礎上再次同時增長多個列:
Tidb:
能夠看出來tidb不支持同時建立多個列,所以要建立多個列只能一個個列的來。
MySQL:
在MySQL中是能夠同時建立多個列的,所以不作測試。
總結:在tidb中,ADD COLUMN 操做目前不支持同時建立多個列。
八、在原表基礎上增長一個索引。
Tidb:
九、在原表基礎上增長多個索引。
Tidb
MySQL:
在MySQL中是能夠同時建立多個索引的,所以不作測試。
總結:在tidb中,ADD INDEX 操做目前不支持同時建立多個索引。
十、刪除一個列(此列是索引列):
Tidb:
MySQL:
在MySQL中,若是此列是索引列,也是能夠直接刪除此列的。
總結:在tidb中,要刪除一個列,那麼要先確認此列是否含有索引,若是不含索引,是能夠直接刪除的。若是含有索引,此列是不能直接刪除。
十一、刪除一個列,此列含有自增主鍵。
Tidb:
MySQL:
在MySQL中,是能夠直接刪除主鍵列的。
總結:在tidb中,若是刪除的列含有主鍵,此列不能直接刪除。
十二、添加複合索引。
Tidb:
MySQL:
實驗時間已超過1個小時,因此就中止了測試。
------------------------------------------------------------------------------------------------------------------------------
接下來咱們測試在線DDL語句的影響。Tidb官方稱tidb是支持在線DDL的。而MySQL這裏是使用5.7.24版本,mysql官方也聲明5.7版本開始支持了在線DDL。咱們使用壓力測試來進行查看,測試數據爲一個表:1000萬行的數據。開啓三個終端,分別負責:壓力測試、DDL語句、show processlist。
一、首先測試tidb的改表語句。
咱們開啓兩個終端,一個終端負責壓力測試。另一個終端負責修改建表語句。兩個終端都是操做同一個數據庫的同一張表。
在壓力測試端,使用oltp腳本測試,以下:
在建表語句端,修改一個字段的屬性:
咱們看到這個結果仍是比較可觀的。過程當中基本沒有鎖表。並且壓力測試的數據值也沒有降低。
二、終端壓力測試oltp繼續進行。
另一端添加字段。
接下來查看mysql進程:
發現tidb在處理上並無鎖表,所以正常業務狀況下是能夠進行在線DDL語句的。
三、刪除字段
一個終端繼續進行壓力測試
二終端進行刪除某列字段
三終端此時查看Mysql進程
四、刪除索引
一個終端繼續進行壓力測試
二終端進行刪除索引
三終端查看mysql進程狀態
五、建立索引
一個終端繼續進行壓力測試
從結果上看基本對壓力測試的結果影響不大,不過偶爾有如圖所示的qps和tps異常下降的現象出現,而後又恢復正常。
二終端進行建立索引
三終端查看進程狀態
從「lock」和「wait」關鍵字來看並無出現。
如今咱們查看一下修改語句:
這個我只是截取了一部份內容,從這裏看出來沒有鎖表現象的出現,說明在正常業務狀況下進行DDL添加索引並不會出現鎖表現象。
下面這個是我測試時使用的腳本: