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) <
}
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
//多個工作線程的處理
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);
}
..
其他引擎測試
和如何類似,你可以寫出你自己的測試引擎
結果
如下只是我用的虛擬機平臺的結果,不代表普適性
存儲引擎
優點
缺點
MyISAM
v?插入快
v?查詢可以使用索引
v?存在表崩潰問題
ARCHIVE
v?大量時比myisam還快
v?無索引
v?不能更新、刪除
InnoDB
v?支持事務
v?慢
TokuDB
v?寫入的高性能沒有測到
v
Maria
v?和Myisam類似
v?對崩潰安全
v
總結
以上是生活随笔為你收集整理的mysql 存储引擎版本_mysql不同版本和存储引擎选型的验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python echo命令_如何用Pyt
- 下一篇: java逸出_Java并发编程 - 对象