日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 存储引擎版本_mysql不同版本和存储引擎选型的验证

發(fā)布時間:2024/7/23 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 存储引擎版本_mysql不同版本和存储引擎选型的验证 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Mysql的版本和存儲引擎較多,為了選擇最適合業(yè)務(wù)使用的系統(tǒng),需要進行一定的驗證,本文描述mysql的驗證過程和思路。

主要涉及:

Mysql的版本

v Mariadb

v Tokudb

v Oracle

具體的存儲引擎

v Myisam

v Innodb

v TokuDB

v Maria

如下是具體的思路

My.cnf配置

log-bin=mysql-bin 關(guān)閉,不要寫日志

skip-networking 開啟

安裝和配置

v mariadb5.5

v Oracle

v Tokudb

如上目錄下有對應(yīng)的安裝,卸載腳本

具體步驟如下:

1.首先停止mysql服務(wù)

a) service mysql stop / service mysqld stop

b) killall -9 mysql | killal -9 mysqld

c) /etc/profile中不要有mysql的環(huán)境變量設(shè)置

2.安裝引擎

a) 以上的各個對應(yīng)目錄有安裝的腳本

3.檢驗

a) 進入對應(yīng)的安裝目錄下的bin目錄

b) ./mysql -uroot -p123456 檢查安裝的版本信息是否正確

c) show engines; show plugins; 可以查看引擎的安裝情況

4.運行單元測試驗證各個引擎的性能

單元測試[Gtest]

基礎(chǔ)插入函數(shù)

包括

v 迭代次數(shù)

v 存儲包的大小:數(shù)據(jù)字段可設(shè)置大小

###是具體的業(yè)務(wù)表

static void insertOneSession(int count, int size, bool canTruncate = true){

### item = createItem(size);

cppdb::session session;

static const std::string sql =

"insert into `###`) \

VALUES ( ?, FROM_UNIXTIME(?), ?, ?, ?, ?, ?, \

INET_ATON(?), ?, ?, ?, ?, ?, \

?, ?, ?)";

{

try {

session = cppdb::session(::common::base::BaseData::dbConnectString);

cppdb::statement stmt;

if (canTruncate) {

const static string ready = "TRUNCATE table ***";

stmt = session.prepare(ready);

stmt.exec();

}

stmt = session.prepare(sql);

for (int i = 0; i < count; i++) {

stmt.reset();

stmt.bind(###);

...

stmt.exec();

}

} catch (std::exception const &e) {

LOG(ERROR)<< "saveDB:" << e.what();

}

// //關(guān)閉鏈接

if (session.is_open())

session.close();

}

{

//統(tǒng)計出表空間

session =

cppdb::session(

"mysql:user=root;password=123456;database=mysql;set_charset_name=utf8; @pool_size=1");

cppdb::statement stmt =

session.create_statement(

"select table_name,engine,ROUND(data_length/1024,2) size,table_rows from information_schema.tables where table_schema='###' and table_name='traffic'");

cppdb::result r = stmt.query();

while(r.next()){

string table_name, engine;

long size, table_rows;

r.fetch(table_name);

r.fetch(engine);

r.fetch(size);

r.fetch(table_rows);

LOG(INFO) <

}

if (session.is_open())

session.close();

}

}

Isam存儲測試

class benchMyisamTest: public testing::Test {

public:

static void SetUpTestCase() {

//建立對應(yīng)的表結(jié)構(gòu)

std::string mysql = "/usr/local/mysql/bin/mysql --default-character-set=utf8 -uroot -p123456 -D mysql -e \"source myisam.sql\"";

system(mysql.c_str());

}

static void TearDownTestCase() {

}

};

TEST_F(benchMyisamTest, 1w100) {

insertOneSession(10000, 100);

}

TEST_F(benchMyisamTest, 1w1000) {

insertOneSession(10000, 1000);

}

....

多線程存儲測試

#include

//多個工作線程的處理

int thread_Num, thread_Size;

void worker(){

insertOneSession(thread_Num, thread_Size);

}

void workerThread(int ts, int count, int size){

//多線程模式下必須使用,否則mysql client庫無法連接錯誤111

mysql_library_init(0, NULL, NULL);

thread_Num = count;

thread_Size = size;

boost::thread_group threads;

for (int i = 0; i < ts; ++i){

threads.create_thread(&worker);

}

threads.join_all();

LOG(INFO) << "done";

//這個錯誤好像是libmysqlclient的兼容問題 Error in my_thread_global_end(): 4 threads didn't exit

mysql_library_end();

}

TEST_F(benchMyisamTest, thread_1w100) {

workerThread(2, 10000, 100);

}

TEST_F(benchMyisamTest, thread_30w) {

workerThread(3, 100000, 1000);

}

..

其他引擎測試

和如何類似,你可以寫出你自己的測試引擎

結(jié)果

如下只是我用的虛擬機平臺的結(jié)果,不代表普適性

存儲引擎

優(yōu)點

缺點

MyISAM

v?插入快

v?查詢可以使用索引

v?存在表崩潰問題

ARCHIVE

v?大量時比myisam還快

v?無索引

v?不能更新、刪除

InnoDB

v?支持事務(wù)

v?慢

TokuDB

v?寫入的高性能沒有測到

v

Maria

v?和Myisam類似

v?對崩潰安全

v

總結(jié)

以上是生活随笔為你收集整理的mysql 存储引擎版本_mysql不同版本和存储引擎选型的验证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。