Skip to content

Commit

Permalink
update tpc
Browse files Browse the repository at this point in the history
  • Loading branch information
fengzhao committed Oct 18, 2023
1 parent c3dfe72 commit 559ba0b
Show file tree
Hide file tree
Showing 4 changed files with 135 additions and 3 deletions.
6 changes: 6 additions & 0 deletions docs/basic/7.MySQL数据类型.md
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,12 @@ BINARY(5) ; --这个是二进制串,存了5字节位,
Table Schema 就是强一致的,约束开发不要乱搞,json 这种弱约束的就是开后门,时间一长 json 字段就成了下水道
MySQL JSON 很垃圾,5.7 系列都有性能问题,测试 8.0 好很多。强烈建义大家,使用前压测一下

## 布尔类型

大多数编程语言都包括布尔型( BOOL 型、 BOOLEAN 型)这种数据类型。当然,SQL 语言里也有。

SQL-99 里将布尔型定义为可以由用户直接操作的数据类型。此外,在 WHERE 子句等地方进行条件判断时也经常会用到布尔型的运算。

## MySQL中的NULL值

大多数编程语言都是基于二值逻辑的,即逻辑真值只有真和假两个。而 SQL 语言则采用一种特别的逻辑体系——三值逻辑,即逻辑真值除了真和假,还有第三个值“不确定”。
Expand Down
5 changes: 2 additions & 3 deletions docs/basic/9.mysql_architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -771,7 +771,7 @@ show warnings会看到优化器重写后的sql

```sql
 -- 那些只返回一个单一值的子查询称之为标量子查询:子查询里面的查询结果只返回一行一列一个值的情况。
 SELECT (SELECT m1 FROM e1 LIMIT 1);
 SELECT * FROM (SELECT m1 FROM e1 LIMIT 1);
 SELECT * FROM e1 WHERE m1 = (SELECT MIN(m2) FROM e2);
 SELECT * FROM e1 WHERE m1 < (SELECT MIN(m2) FROM e2);

Expand All @@ -780,8 +780,7 @@ show warnings会看到优化器重写后的sql
-- 查询出销售单价高于平均销售单价的商品:子查询只返回一个值(平均单价)
SELECT product_id, product_name, sale_price
FROM Product
WHERE sale_price > (SELECT AVG(sale_price)
FROM Product);
WHERE sale_price > (SELECT AVG(sale_price)FROM Product);



Expand Down
37 changes: 37 additions & 0 deletions docs/optimize/1.overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,38 @@

**基准测试工具和标准**


**TPC简介**
事务处理性能委员会( Transaction ProcessingPerformance Council ),是由数10家会员公司创建的非盈利组织,总部设在美国。该组织对全世界开放,但迄今为止,绝大多数会员都是美、日、西欧的大公司。

TPC的成员主要是计算机软硬件厂家,而非计算机用户,它的功能是制定商务应用基准程序(Benchmark)的标准规范、性能和价格度量,并管理测试结果的发布。

TPC-C用于测试数据库系统的事务处理能力,TPC-App用于测试7×24 环境下B2B的应用服务和Web服务的能力。

TPC 组织还发布过TPC-S(Server 专门测试基准程序)、TPC-E(大型企业信息服务测试基准程序)和TPC-Client/Server等测试标准,但这3个标准不被业界接受而被放弃。

TPC不给出基准程序的代码,而只给出基准程序的标准规范(Standard Specification)。任何厂家或其它测试者都可以根据规范,最优地构造出自己的系统(测试平台和测试程序)。(需要自己写测试工具,测试完之后提交给TPC协会)为保证测试结果的客观性,被测试者(通常是厂家)必须提交给TPC一套完整的报告(FullDisclosure Report),包括被测系统的详细配置、分类价格和包含五年维护费用在内的总价格。该报告必须由TPC授权的审核员核实(TPC本身并不做审计),现在全球只有不到十个审核员,全部在美国。(测试价格昂贵的原因)

TPC目前推出的基准程序

TPC推出过11套基准程序,分别是正在使用的TPC-App、TPC-H、TPC-C、TPC-W,过时的TPC-A、TPC-B、TPC-D和TPC-R,以及因为不被业界接受而放弃的TPC-S(Server专门测试基准程序)、TPC-E(大型企业信息服务测试基准程序)和TPC-Client/Server。这里重点介绍TPC-H。

**TPC-H的目的**
TPC-H要目的是评价特定查询的决策支持能力,强调服务器在数据挖掘、分析处理方面的能力。查询是决策支持应用的最主要应用之一,数据仓库中的复杂查询可以分成两种类型:一种是预先知道的查询,如定期的业务报表;另一种则是事先未知的查询,称为动态查询(Ad- Hoc Query)。

通俗的讲,TPC-H就是当一家数据库开发商开发了一个新的数据库操作系统,采用TpC-H作为测试基准,来测试衡量数据库操作系统查询决策支持方面的能力.

**TPC-H的衡量指标**
它模拟决策支持系统中的数据库操作,测试数据库系统复杂查询的响应时间,以每小时执行的查询数(TPC-H QphH@Siz)作为度量指标.

**TPC-H标准规范**
TPC-H标准规范由10章正文和5个附录组成。详细内容见 https://www.tpc.org/TPC_Documents_Current_Versions/pdf/TPC-H_v3.0.1.pdf

**数据库运行的环境条件**
TPC-H测试模型为数据库服务器连续7×24 小时工作,可能只有1 次/月的维护;多用户并发执行复杂的动态查询,同时有并发执行表修改操作。

数据库模型共有8 张表,除Nation 和Region 表外,其它表与测试的数据量有关,即比例因SF(Scale Factor)

[TPC-C](https://www.tpc.org/tpcc/)是TPC(事务处理性能委员会)推出的一系列性能测试标准中的一款,自1992年推出,便成为了数据库性能测试的标杆,各个数据库大厂都向TPC委员会提交了测试结果,以期在TPC-C测试的排行榜上拥有一席之地。就像决战紫禁之巅,论剑华山之巅,拥有一席之地的都是成名的大佬们。


Expand All @@ -63,6 +95,11 @@ TPC-C的批发操作在概念上包括5个操作,新订单操作、付款操
TPC-C使用tpmC值(Transactions per Minute)来衡量系统最大有效吞吐量(MQTh,Max Qualified Throughput),其中Transactions以NewOrder Transaction为准,即最终衡量单位为每分钟处理的新订单数。


TPC-H是业界常用的一套Benchmark,由TPC委员会制定发布,用于评测数据库的分析型查询能力。TPC-H查询包含8张数据表、22条复杂的SQL查询,大多数查询包含若干表Join、子查询和Group-by聚合等。

从MySQL官网搞了一份[ddl.sql](./ddl.sql)


**基准测试的性能指标**

在衡量一个系统性能时,一定要有可量化的指标,无法量化就无法有效的优化系统性能。
Expand Down
90 changes: 90 additions & 0 deletions docs/optimize/ddl.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@

CREATE DATABASE tpch character set utf8mb4;
USE tpch;

CREATE TABLE nation (
N_NATIONKEY INTEGER primary key,
N_NAME CHAR(25) NOT NULL,
N_REGIONKEY INTEGER NOT NULL,
N_COMMENT VARCHAR(152)
);

CREATE TABLE region (
R_REGIONKEY INTEGER primary key,
R_NAME CHAR(25) NOT NULL,
R_COMMENT VARCHAR(152)
);

CREATE TABLE part (
P_PARTKEY INTEGER primary key,
P_NAME VARCHAR(55) NOT NULL,
P_MFGR CHAR(25) NOT NULL,
P_BRAND CHAR(10) NOT NULL,
P_TYPE VARCHAR(25) NOT NULL,
P_SIZE INTEGER NOT NULL,
P_CONTAINER CHAR(10) NOT NULL,
P_RETAILPRICE DECIMAL(15,2) NOT NULL,
P_COMMENT VARCHAR(23) NOT NULL
);

CREATE TABLE supplier (
S_SUPPKEY INTEGER primary key,
S_NAME CHAR(25) NOT NULL,
S_ADDRESS VARCHAR(40) NOT NULL,
S_NATIONKEY INTEGER NOT NULL,
S_PHONE CHAR(15) NOT NULL,
S_ACCTBAL DECIMAL(15,2) NOT NULL,
S_COMMENT VARCHAR(101) NOT NULL
);

CREATE TABLE partsupp (
PS_PARTKEY INTEGER NOT NULL,
PS_SUPPKEY INTEGER NOT NULL,
PS_AVAILQTY INTEGER NOT NULL,
PS_SUPPLYCOST DECIMAL(15,2) NOT NULL,
PS_COMMENT VARCHAR(199) NOT NULL,
primary key (ps_partkey, ps_suppkey)
);

CREATE TABLE customer (
C_CUSTKEY INTEGER primary key,
C_NAME VARCHAR(25) NOT NULL,
C_ADDRESS VARCHAR(40) NOT NULL,
C_NATIONKEY INTEGER NOT NULL,
C_PHONE CHAR(15) NOT NULL,
C_ACCTBAL DECIMAL(15,2) NOT NULL,
C_MKTSEGMENT CHAR(10) NOT NULL,
C_COMMENT VARCHAR(117) NOT NULL
);

CREATE TABLE orders (
O_ORDERKEY INTEGER primary key,
O_CUSTKEY INTEGER NOT NULL,
O_ORDERSTATUS CHAR(1) NOT NULL,
O_TOTALPRICE DECIMAL(15,2) NOT NULL,
O_ORDERDATE DATE NOT NULL,
O_ORDERPRIORITY CHAR(15) NOT NULL,
O_CLERK CHAR(15) NOT NULL,
O_SHIPPRIORITY INTEGER NOT NULL,
O_COMMENT VARCHAR(79) NOT NULL
);

CREATE TABLE lineitem (
L_ORDERKEY INTEGER NOT NULL,
L_PARTKEY INTEGER NOT NULL,
L_SUPPKEY INTEGER NOT NULL,
L_LINENUMBER INTEGER NOT NULL,
L_QUANTITY DECIMAL(15,2) NOT NULL,
L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
L_DISCOUNT DECIMAL(15,2) NOT NULL,
L_TAX DECIMAL(15,2) NOT NULL,
L_RETURNFLAG CHAR(1) NOT NULL,
L_LINESTATUS CHAR(1) NOT NULL,
L_SHIPDATE DATE NOT NULL,
L_COMMITDATE DATE NOT NULL,
L_RECEIPTDATE DATE NOT NULL,
L_SHIPINSTRUCT CHAR(25) NOT NULL,
L_SHIPMODE CHAR(10) NOT NULL,
L_COMMENT VARCHAR(44) NOT NULL,
primary key(L_ORDERKEY,L_LINENUMBER)
);

0 comments on commit 559ba0b

Please sign in to comment.