程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql不同版本和存儲引擎選型的驗證

mysql不同版本和存儲引擎選型的驗證

編輯:MySQL綜合教程

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

主要涉及:

Mysql的版本

v Mariadb

v Tokudb

v Oracle

具體的存儲引擎

v Myisam

v Innodb

v TokuDB

v Maria

如下是具體的思路

My.cnf配置

log-bin=mysql-bin 關閉,不要寫日志

skip-networking 開啟

安裝和配置

v mariadb5.5

v Oracle

v Tokudb

如上目錄下有對應的安裝,卸載腳本

具體步驟如下:

1.首先停止mysql服務

a) service mysql stop / service mysqld stop

b) killall -9 mysql | killal -9 mysqld

c) /etc/profile中不要有mysql的環境變量設置

2.安裝引擎

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

3.檢驗

a) 進入對應的安裝目錄下的bin目錄

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

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

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

單元測試[Gtest]

基礎插入函數

包括

v 迭代次數

v 存儲包的大小:數據字段可設置大小

###是具體的業務表

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();

}

// //關閉鏈接

if (session.is_open())

session.close();

}

{

//統計出表空間

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) <<"TableInfo::" << table_name << " " << engine <<" " << size << " "<<table_rows;

}

if (session.is_open())

session.close();

}

}

Isam存儲測試

class benchMyisamTest: public testing::Test {

public:

static void SetUpTestCase() {

//建立對應的表結構

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 <mysql.h>

//多個工作線程的處理

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);

}

..

其他引擎測試

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

結果

如下只是我用的虛擬機平台的結果,不代表普適性

 

http://pan.baidu.com/s/1sj0cI8t 是具體的一些安裝和配置不同的數據庫腳本

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved