Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

MySQL基础

mysql系统表

默认存在下面几个database

+--------------------+
| Database           |
+--------------------+
| information_schema |  元数据管理
| mysql              |  杂项
| performance_schema |  性能监控,监控各项运行时指标
| sys                |  各种系统视图
| sys_mac            |
+--------------------+
  • 区分没有那么明确,设计不是那么清晰易懂,不类似 pg 见文知意

mysqltpch测试

使用官方套件,或者使用duckdb输出数据之后导入

// 生产测试数据, s是数据集大小
./dbgen -vf -s 1
// 生成更新数据
./dbgen -v -U 1 -s 1

// 输出SQL
./qgen -d 1 > 1.sql

测试指标

  • 压力测试

    • 需要测试22条查询语句和更新语句
  • 吞吐量

    • 并发进行压力测试
  • 上面两个是不同的指标, 也有专门的测试工具,但实际绝大多数测试报告只是导入数据之后,只测试22条查询语句,性能指标是总的时间,所以随大流即可

  • 表结构可以按自己需求添加index

建表及数据加载

create database tpch;
use tpch;
source /home/asky/TPC-H-V3.0.1/dbgen/dss.ddl;
-- index
source /home/asky/TPC-H-V3.0.1/dbgen/dss.ri

set GLOBAL innodb_flush_log_at_trx_commit = 0;
set GLOBAL sync_binlog = 0;
set sql_log_bin = 0;

LOAD DATA  INFILE '/home/asky/TPC-H-V3.0.1/dbgen/customer.tbl' INTO TABLE CUSTOMER FIELDS TERMINATED BY '|';
LOAD DATA  INFILE '/home/asky/TPC-H-V3.0.1/dbgen/lineitem.tbl' INTO TABLE LINEITEM FIELDS TERMINATED BY '|';
LOAD DATA  INFILE '/home/asky/TPC-H-V3.0.1/dbgen/nation.tbl' INTO TABLE NATION FIELDS TERMINATED BY '|';
LOAD DATA  INFILE '/home/asky/TPC-H-V3.0.1/dbgen/orders.tbl' INTO TABLE ORDERS FIELDS TERMINATED BY '|';
LOAD DATA  INFILE '/home/asky/TPC-H-V3.0.1/dbgen/partsupp.tbl' INTO TABLE PARTSUPP FIELDS TERMINATED BY '|';
LOAD DATA  INFILE '/home/asky/TPC-H-V3.0.1/dbgen/part.tbl' INTO TABLE PART FIELDS TERMINATED BY '|';
LOAD DATA  INFILE '/home/asky/TPC-H-V3.0.1/dbgen/region.tbl' INTO TABLE REGION FIELDS TERMINATED BY '|';
LOAD DATA  INFILE '/home/asky/TPC-H-V3.0.1/dbgen/supplier.tbl' INTO TABLE SUPPLIER FIELDS TERMINATED BY '|';

analyze table CUSTOMER  ;
analyze table LINEITEM  ;
analyze table NATION    ;
analyze table ORDERS    ;
analyze table PART      ;
analyze table PARTSUPP  ;
analyze table REGION    ;
analyze table SUPPLIER  ;

  • 导入速度慢的令人发指,需要调查具体慢的问题,pg 在开箱即用没有调优的情况下,1 g 的数据导入最多不过1分钟
    • MySQL有一些额外的安全机制
    • MySQL debug 有许多debug相关的宏,此时宏内部的操作 debug 下会执行 从文件导入,首要目的就是速度,安全的话完全可以使用insert,失败了的大不了重来就行,MySQL设计理念偏保守,个人赞同pg的处理方式

需要进行一轮完整的性能测试,使用release版本,并且尝试使用高版本gcc编译