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编译