tidb在DDL語句方面的測試

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添加索引並不會出現鎖表現象。

 

下面這個是我測試時使用的腳本:

相關文章
相關標籤/搜索