tidb在DDL語句方面的測試


Mysql與tidb測試數據為8000萬行。

1、修改一個字段的列名,比如將“ctime”修改為“cctime”。

Tidb測試:

 

MySQL測試:

 

2、同一屬性之間切換,即修改一個字段的屬性大小。比如將int類型修改為bigint類型

Tidb:

 

Mysql:

 

MySQL是創建臨時表的方式來加字段,因此這個時間花費已超過40分鍾,所以停止了操作。

總結:同一個屬性之間切換時,可以對比出來,tidb花費的時間是極少的,在8000萬行的數據時依然能表現出極好的性能,但是同比之下MySQL的表現極差,花費時間太長。

3、不同屬性之間切換,即修改一個字段的屬性為其他屬性,比如將int類型修改為varchar類型

Tidb:

 

可以看出來tidb暫時不支持此種語法。

MySQL

 

MySQL是支持此語法的。

但是上面的這個例子中,test這個表只有一行數據,所以很快就修改了。如果對於大數據集下,比如co2這個表,有8000萬行數據,那么此時MySQL在修改列屬性花費的時間非常長。

 

總結:此時可以查看tidb的官方說明書。

 

4、上面的三個例子中,我們修改的是非索引的列,在接下來的例子中,我們修改一個索引列嘗試一下,將trace_app_id修改為trace_app_idd。

 

Tidb:

 

MySQL:

 mysql修改字段時間過長,這里終止了

5、將trace_app_idd的屬性范圍修改大一些,比如將varchar(200)修改為varchar(300)。

Tidb:

 

MySQL:

  mysql修改字段時間過長,這里終止了

6、在原表基礎上增加一個列。

Tidb:

 

MySQL:

 mysql修改字段時間過長,這里終止了

7、在原表基礎上再次同時增加多個列:

Tidb:

 

可以看出來tidb不支持同時創建多個列,因此要創建多個列只能一個個列的來。

MySQL:

在MySQL中是可以同時創建多個列的,因此不做測試。

總結:在tidb中,ADD COLUMN 操作目前不支持同時創建多個列。

8、在原表基礎上增加一個索引。

Tidb:

 

9、在原表基礎上增加多個索引。

Tidb

 

MySQL:

在MySQL中是可以同時創建多個索引的,因此不做測試。

總結:在tidb中,ADD  INDEX 操作目前不支持同時創建多個索引。

 

10、刪除一個列(此列是索引列):

Tidb:

 

MySQL:

在MySQL中,如果此列是索引列,也是可以直接刪除此列的。

總結:在tidb中,要刪除一個列,那么要先確認此列是否含有索引,如果不含索引,是可以直接刪除的。如果含有索引,此列是不能直接刪除。

11、刪除一個列,此列含有自增主鍵。

Tidb:

 

MySQL:

在MySQL中,是可以直接刪除主鍵列的。

總結:在tidb中,如果刪除的列含有主鍵,此列不能直接刪除。

12、添加復合索引。

Tidb:

 

MySQL:

實驗時間已超過1個小時,所以就停止了測試。

 

------------------------------------------------------------------------------------------------------------------------------

接下來我們測試在線DDL語句的影響。Tidb官方稱tidb是支持在線DDL的。而MySQL這里是使用5.7.24版本,mysql官方也聲明5.7版本開始支持了在線DDL。我們使用壓力測試來進行查看,測試數據為一個表:1000萬行的數據。開啟三個終端,分別負責:壓力測試、DDL語句、show processlist。

1、首先測試tidb的改表語句。

我們開啟兩個終端,一個終端負責壓力測試。另外一個終端負責修改建表語句。兩個終端都是操作同一個數據庫的同一張表。

在壓力測試端,使用oltp腳本測試,如下:

 

在建表語句端,修改一個字段的屬性:

 

我們看到這個結果還是比較可觀的。過程中基本沒有鎖表。而且壓力測試的數據值也沒有下降。

 

 

 

2、終端壓力測試oltp繼續進行。

另外一端添加字段。

 

接下來查看mysql進程:

 

發現tidb在處理上並沒有鎖表,因此正常業務情況下是可以進行在線DDL語句的。

3、刪除字段

一個終端繼續進行壓力測試

二終端進行刪除某列字段

 

三終端此時查看Mysql進程

 

 

4、刪除索引

一個終端繼續進行壓力測試

二終端進行刪除索引

 

三終端查看mysql進程狀態

 

 

 

5、創建索引

一個終端繼續進行壓力測試

 

從結果上看基本對壓力測試的結果影響不大,不過偶爾有如圖所示的qps和tps異常降低的現象出現,然后又恢復正常。

二終端進行創建索引

 

三終端查看進程狀態

從“lock”和“wait”關鍵字來看並沒有出現。

現在我們查看一下修改語句:

 

這個我只是截取了一部分內容,從這里看出來沒有鎖表現象的出現,說明在正常業務情況下進行DDL添加索引並不會出現鎖表現象。

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM