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

    }

    ..

    其他引擎测试

    和如何类似,你可以写出你自己的测试引擎

    结果

    如下只是我用的虚拟机平台的结果,不代表普适性

    存储引擎

    优点

    缺点

    MyISAM

    v 插入快

    v 查询可以使用索引

    v 存在表崩溃问题

    ARCHIVE

    v 大量时比myisam还快

    v 无索引

    v 不能更新、删除

    InnoDB

    v 支持事务

    v 慢

    TokuDB

    v 写入的高性能没有测到

    Maria

    v 和Myisam类似

    v 对崩溃安全

    http://pan.baidu.com/s/1sj0cI8t 是具体的一些安装和配置不同的数据库脚本

  • 相关阅读:
    书列君荐书|《福尔摩斯探案大全集》.(英)阿瑟.柯南道尔.扫描版
    anaconda同时集成Python2 和 Python3
    python 使用sqlite,ConfigParser实例
    python 爬虫爬取历年双色球开奖信息
    关于python 爬虫遇到的反盗链
    CentOS7搭建Docker私有仓库----Docker
    Ansible + shell 实现部署fastdfs+nginx 实现图片服务器并提供动态缩放功能;
    python+fastdfs+nginx实现打包下载功能
    监控生产服务器内存使用前十
    python操作MySQL--实例
  • 原文地址:https://www.cnblogs.com/2018/p/3483525.html
Copyright © 2020-2023  润新知