PolarDB查询处理与扩容
1. 创建实验资源
在实验开始之前,您需要创建相关实验资源。
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。
说明:资源创建过程需要3~5分钟。
2. 准备实验环境
本步骤指导您如何通过控制台创建数据库账号、数据库和添加白名单。
- 双击打开远程桌面的Chromium网页浏览器。
- 在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码到用户密码输入框,单击登录。
- 复制下方地址,在Chromium网页浏览器打开新页签,粘贴并访问云数据库PolarDB控制台。
https://polardb.console.aliyun.com/
- 在集群列表页面顶部菜单栏中,切换资源所在地域。
说明:您可在云产品资源列表中查看PolarDB资源所在的地域。
- 在集群列表页面,找到您的PolarDB_1实例,单击实例ID。
说明:您可在云产品资源列表中查看实验室分配的PolarDB_1实例ID。
- 在左侧导航栏中,选择配置与管理>集群白名单。
- 在集群白名单页面的IP列表区域,单击default分组右侧的配置。
- 在配置白名单面板,将白名单内IP地址修改为0.0.0.0/0,单击确定。
- 在左侧导航栏中,选择配置与管理>账号管理。
- 在账号管理页面,单击创建账号。
- 在创建账号对话框中,参考说明配置账号信息,单击确定。
参数说明:
- 数据库账号:输入数据库账号名称,例如test_user。
- 账号类型:选择高权限账号。
- 密码:输入账号密码,例如Password123。
- 确认密码:再次输入账号密码。
- 在左侧导航栏中,选择配置与管理>数据库管理。
- 在数据库管理页面,单击创建数据库。
- 在创建数据库对话框中,参考说明配置数据库信息,单击创建。
参数说明:
- 数据库(DB)名称:输入数据库名称,例如tpch_100。
- 支持字符集:默认设为utf8mb4。
- 备注说明:非必填。用于备注该数据库的相关信息,便于后续数据库管理,最多支持256个字符。
3. 准备TPCH测试代码/数据
- 在实验室右侧功能栏中,单击图标,切换至Web Terminal,自动连接到云服务器ECS。
- 进入TPC官网注册账号,下载TPCH测试代码。
说明:本实验为了方便用户下载TPCH测试代码,您可在ECS终端中直接执行如下命令,下载TPCH测试代码。
wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/tpc-h-tool.zip
- 执行如下命令,安装mysql客户端,unzip,make,gcc。
# centos环境下 sudo yum install mysql unzip make gcc -y
- 执行如下命令,解压tpc-h-tool.zip。
unzip tpc-h-tool.zip
- 依次执行如下命令,进入dbgen目录,复制makefile文件,编辑makefile文件。
cd TPC-H\ V3.0.1/dbgen cp makefile.suite makefile vim makefile
- 在makefile文件内按i键进入编辑模式,根据如下,修改makefile文件中的CC、DATABASE、MACHINE、WORKLOAD等参数定义。修改完成后按下Esc键后,输入:wq后按下Enter键保存并退出。
################ ## CHANGE NAME OF ANSI COMPILER HERE ################ CC = gcc # Current values for DATABASE are: INFORMIX, DB2, ORACLE, # SQLSERVER, SYBASE, TDAT (Teradata) # Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS, # SGI, SUN, U2200, VMS, LINUX, WIN32 # Current values for WORKLOAD are: TPCH DATABASE= MYSQL MACHINE = LINUX WORKLOAD = TPCH
- 执行如下命令,修改tpcd.h头文件。
vim tpcd.h
- 在tpcd.h头文件内按i键进入编辑模式,在文件内容尾部添加如下宏定义,添加完成后按下Esc键后,输入:wq后按下Enter键保存并退出。
#ifdef MYSQL #define GEN_QUERY_PLAN "" #define START_TRAN "START TRANSACTION" #define END_TRAN "COMMIT" #define SET_OUTPUT "" #define SET_ROWCOUNT "limit %d;\n" #define SET_DBASE "use %s;\n" #endif
- 在dbgen目录下,执行如下面命令,对文件进行编译。编译完成后,当前目录下会生成两个可执行文件:包括数据生成工具dbgen和SQL生成工具qgen。由于不同的seed生成的查询不同,为了结果的可重复性,建议使用官方提供的22个查询。
make
- 生成一个仓库的测试数据.
./dbgen -s 1
- 执行如下命令,下载官方的22个查询。
wget https://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/145463/cn_zh/1575017874050/22%E4%B8%AA%E6%9F%A5%E8%AF%A2.zip
- 执行如下命令,解压查询文件到queries目录。
unzip -j 22个查询.zip -d /root/TPC-H\ V3.0.1/dbgen/queries
4. TPCH测试
本步骤测试规格为2核4GB的云数据库PolarDB,进行TPCH测试查询22个SQL,云数据库PolarDB的性能。
- 执行如下命令,在dbgen目录下,编辑创建表脚本dss.ddl。
vim dss.ddl
- 在dss.ddl脚本内按下gg,再按下dG删除脚本中所有内容。按i键进入编辑模式,将如下内容添加到dss.ddl脚本中。添加完成后按下Esc键后,输入:wq后按下Enter键保存并退出。
说明:请您先删除脚本中所有内容后再根据实验手册添加创建表的脚本内容。
-- Sccsid: @(#)dss.ddl 2.1.8.1 drop database if exists tpch_100; create database tpch_100; use tpch_100; CREATE TABLE NATION ( N_NATIONKEY INTEGER NOT NULL , N_NAME CHAR(25) NOT NULL, N_REGIONKEY INTEGER NOT NULL, N_COMMENT VARCHAR(152)); CREATE TABLE REGION ( R_REGIONKEY INTEGER NOT NULL , R_NAME CHAR(25) NOT NULL, R_COMMENT VARCHAR(152)); CREATE TABLE PART ( P_PARTKEY INTEGER NOT NULL , 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 NOT NULL , 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 ); CREATE TABLE CUSTOMER ( C_CUSTKEY INTEGER NOT NULL , 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 NOT NULL , 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);
- 执行如下命令,创建导入数据脚本load.ddl。
vim load.ddl
- 在load.ddl脚本中按i键进入编辑模式,将如下内容添加到load.ddl脚本中。添加完成后按下Esc键后,输入:wq后按下Enter键保存并退出。
load data local INFILE 'customer.tbl' INTO TABLE customer FIELDS TERMINATED BY '|'; load data local INFILE 'region.tbl' INTO TABLE region FIELDS TERMINATED BY '|'; load data local INFILE 'nation.tbl' INTO TABLE nation FIELDS TERMINATED BY '|'; load data local INFILE 'supplier.tbl' INTO TABLE supplier FIELDS TERMINATED BY '|'; load data local INFILE 'part.tbl' INTO TABLE part FIELDS TERMINATED BY '|'; load data local INFILE 'partsupp.tbl' INTO TABLE partsupp FIELDS TERMINATED BY '|'; load data local INFILE 'orders.tbl' INTO TABLE orders FIELDS TERMINATED BY '|'; load data local INFILE 'lineitem.tbl' INTO TABLE lineitem FIELDS TERMINATED BY '|';
- 执行如下命令,修改主外键关系脚本dss.ri。
vim dss.ri
- 在dss.ri脚本内按下gg,再按下dG删除脚本中所有内容。按i键进入编辑模式,将如下内容添加到dss.ri脚本中。添加完成后按下Esc键后,输入:wq后按下Enter键保存并退出。
说明:请您先删除脚本中所有内容后再根据手册添加主外键关系的脚本内容。
-- Sccsid: @(#)dss.ri 2.1.8.1 -- tpch_100 Benchmark Version 8.0 use tpch_100; -- ALTER TABLE tpch_100.REGION DROP PRIMARY KEY; -- ALTER TABLE tpch_100.NATION DROP PRIMARY KEY; -- ALTER TABLE tpch_100.PART DROP PRIMARY KEY; -- ALTER TABLE tpch_100.SUPPLIER DROP PRIMARY KEY; -- ALTER TABLE tpch_100.PARTSUPP DROP PRIMARY KEY; -- ALTER TABLE tpch_100.ORDERS DROP PRIMARY KEY; -- ALTER TABLE tpch_100.LINEITEM DROP PRIMARY KEY; -- ALTER TABLE tpch_100.CUSTOMER DROP PRIMARY KEY; -- For table REGION ALTER TABLE tpch_100.REGION ADD PRIMARY KEY (R_REGIONKEY); -- For table NATION ALTER TABLE tpch_100.NATION ADD PRIMARY KEY (N_NATIONKEY); ALTER TABLE tpch_100.NATION ADD FOREIGN KEY NATION_FK1 (N_REGIONKEY) references tpch_100.REGION(R_REGIONKEY); COMMIT WORK; -- For table PART ALTER TABLE tpch_100.PART ADD PRIMARY KEY (P_PARTKEY); COMMIT WORK; -- For table SUPPLIER ALTER TABLE tpch_100.SUPPLIER ADD PRIMARY KEY (S_SUPPKEY); ALTER TABLE tpch_100.SUPPLIER ADD FOREIGN KEY SUPPLIER_FK1 (S_NATIONKEY) references tpch_100.NATION(N_NATIONKEY); COMMIT WORK; -- For table PARTSUPP ALTER TABLE tpch_100.PARTSUPP ADD PRIMARY KEY (PS_PARTKEY,PS_SUPPKEY); COMMIT WORK; -- For table CUSTOMER ALTER TABLE tpch_100.CUSTOMER ADD PRIMARY KEY (C_CUSTKEY); ALTER TABLE tpch_100.CUSTOMER ADD FOREIGN KEY CUSTOMER_FK1 (C_NATIONKEY) references tpch_100.NATION(N_NATIONKEY); COMMIT WORK; -- For table LINEITEM ALTER TABLE tpch_100.LINEITEM ADD PRIMARY KEY (L_ORDERKEY,L_LINENUMBER); COMMIT WORK; -- For table ORDERS ALTER TABLE tpch_100.ORDERS ADD PRIMARY KEY (O_ORDERKEY); COMMIT WORK; -- For table PARTSUPP ALTER TABLE tpch_100.PARTSUPP ADD FOREIGN KEY PARTSUPP_FK1 (PS_SUPPKEY) references tpch_100.SUPPLIER(S_SUPPKEY); COMMIT WORK; ALTER TABLE tpch_100.PARTSUPP ADD FOREIGN KEY PARTSUPP_FK2 (PS_PARTKEY) references tpch_100.PART(P_PARTKEY); COMMIT WORK; -- For table ORDERS ALTER TABLE tpch_100.ORDERS ADD FOREIGN KEY ORDERS_FK1 (O_CUSTKEY) references tpch_100.CUSTOMER(C_CUSTKEY); COMMIT WORK; -- For table LINEITEM ALTER TABLE tpch_100.LINEITEM ADD FOREIGN KEY LINEITEM_FK1 (L_ORDERKEY) references tpch_100.ORDERS(O_ORDERKEY); COMMIT WORK; ALTER TABLE tpch_100.LINEITEM ADD FOREIGN KEY LINEITEM_FK2 (L_PARTKEY,L_SUPPKEY) references tpch_100.PARTSUPP(PS_PARTKEY,PS_SUPPKEY); COMMIT WORK; use tpch_100; alter table CUSTOMER rename to customer ; alter table LINEITEM rename to lineitem ; alter table NATION rename to nation ; alter table ORDERS rename to orders ; alter table PART rename to part ; alter table PARTSUPP rename to partsupp ; alter table REGION rename to region ; alter table SUPPLIER rename to supplier ;
- 执行如下命令,连接PolarDB_1集群。
说明:您需要将改为云数据库PolarDB_1实例的集群私网地址,您可在云产品资源列表中查看到PolarDB_1实例的集群私网地址。你需要将<数据库账号>和<数据库密码>改为第二节中创建的数据库账号test_user和密码Password123。
mysql -h<PolarDB_1集群连接地址> -P3306 -u<数据库账号> -p<数据库密码>
- 依次执行如下命令,创建表、导入数据和设置主外键。
说明:导入数据和设置主外键时长会比较久,大约需要20分钟,请您耐心等待。
source ./dss.ddl source ./load.ddl source ./dss.ri
- 输入exit;并回车退出数据库。
- 执行如下命令,创建建立索引的脚本create_index.sh。
vim create_index.sh
- 在create_index.sh脚本中按i键进入编辑模式,将如下内容添加到create_index.sh脚本中。添加完成后按下Esc键后,输入:wq后按下Enter键保存并退出。
#!/usr/bin/bash host=$1 port=$2 user=$3 password=$4 db=$5 sqls=("create index i_s_nationkey on supplier (s_nationkey);" "create index i_ps_partkey on partsupp (ps_partkey);" "create index i_ps_suppkey on partsupp (ps_suppkey);" "create index i_c_nationkey on customer (c_nationkey);" "create index i_o_custkey on orders (o_custkey);" "create index i_o_orderdate on orders (o_orderdate);" "create index i_l_orderkey on lineitem (l_orderkey);" "create index i_l_partkey on lineitem (l_partkey);" "create index i_l_suppkey on lineitem (l_suppkey);" "create index i_l_partkey_suppkey on lineitem (l_partkey, l_suppkey);" "create index i_l_shipdate on lineitem (l_shipdate);" "create index i_l_commitdate on lineitem (l_commitdate);" "create index i_l_receiptdate on lineitem (l_receiptdate);" "create index i_n_regionkey on nation (n_regionkey);" "analyze table supplier" "analyze table part" "analyze table partsupp" "analyze table customer" "analyze table orders" "analyze table lineitem" "analyze table nation" "analyze table region") for sql in "${sqls[@]}" do mysql -h$host -P$port -u$user -p$password -D$db -e "$sql" done
- 执行如下命令,运行create_index.sh脚本。
说明:为云数据库PolarDB_1实例的集群私网地址,您可在云产品资源列表中查看到PolarDB_1实例的集群私网地址。端口号默认为3306。<数据库账号>和<数据库密码>为第二节中创建的数据库账号test_user和密码Password123。<数据库>为tpch_100。
chmod a+x create_index.sh ./create_index.sh <PolarDB_1集群连接地址> <端口号> <数据库账号> <数据库密码> <数据库>
- 执行如下命令,创建将索引数据预载到内存池的脚本load_index.sh
vim load_index.sh
- 在load_index.sh脚本中按i键进入编辑模式,将如下内容添加到load_index.sh脚本中。添加完成后按下Esc键后,输入:wq后按下Enter键保存并退出。
#!/bin/bash host=$1 port=$2 user=$3 password=$4 dbname=$5 MYSQL="mysql -h$host -P$port -u$user -p$password -D$dbname" if [ -z ${dbname} ]; then echo "dbname not defined." exit 1 fi table_indexes=( "supplier PRIMARY" "supplier i_s_nationkey" "part PRIMARY" "partsupp PRIMARY" "partsupp i_ps_partkey" "partsupp i_ps_suppkey" "customer PRIMARY" "customer i_c_nationkey" "orders PRIMARY" "orders i_o_custkey" "orders i_o_orderdate" "lineitem PRIMARY" "lineitem i_l_orderkey" "lineitem i_l_partkey" "lineitem i_l_suppkey" "lineitem i_l_partkey_suppkey" "lineitem i_l_shipdate" "lineitem i_l_commitdate" "lineitem i_l_receiptdate" "nation i_n_regionkey" "nation PRIMARY" "region PRIMARY" ) for table_index in "${table_indexes[@]}" do ti=($table_index) table=${ti[0]} index=${ti[1]} SQL="select count(*) from ${table} force index(${index})" echo "$MYSQL -e '$SQL'" $MYSQL -e "$SQL" done
- 执行如下命令,运行load_index.sh脚本。
说明:为云数据库PolarDB_1实例的集群私网地址,您可在云产品资源列表中查看到PolarDB_1实例的集群私网地址。端口号默认为3306。<数据库账号>和<数据库密码>为第二节中创建的数据库账号test_user和密码Password123。<数据库>为tpch_100。
chmod a+x load_index.sh ./load_index.sh <PolarDB_1集群连接地址> <端口号> <数据库账号> <数据库密码> <数据库>
- 执行如下命令,切换到queries目录,创建测试脚本run_benchmark.sh。
cd queries vim run_benchmark.sh
- 在run_benchmark.sh脚本中按i键进入编辑模式,将如下内容添加到run_benchmark.sh脚本中。添加完成后按下Esc键后,输入:wq后按下Enter键保存并退出。
#!/usr/bin/env bash host=$1 port=$2 user=$3 password=$4 database=$5 resfile=$6 echo "start test run at"`date "+%Y-%m-%d %H:%M:%S"`|tee -a ${resfile}.out for (( i=1; i<=22;i=i+1 )) do queryfile="Q"${i}".sql" start_time=`date "+%s.%N"` echo "run query ${i}"|tee -a ${resfile}.out mysql -h ${host} -P${port} -u${user} -p${password} $database -e" source $queryfile;" |tee -a ${resfile}.out end_time=`date "+%s.%N"` start_s=${start_time%.*} start_nanos=${start_time#*.} end_s=${end_time%.*} end_nanos=${end_time#*.} if [ "$end_nanos" -lt "$start_nanos" ];then end_s=$(( 10#$end_s -1 )) end_nanos=$(( 10#$end_nanos + 10 ** 9)) fi time=$(( 10#$end_s - 10#$start_s )).`printf "%03d\n" $(( (10#$end_nanos - 10#$start_nanos)/10**6 ))` echo ${queryfile} "the "${j}" run cost "${time}" second start at"`date -d @$start_time "+%Y-%m-%d %H:%M:%S"`" stop at"`date -d @$end_time "+%Y-%m-%d %H:%M:%S"` >> ${resfile}.time done
- 执行如下命令,运行run_benchmark.sh脚本,运行22个查询SQL。
说明:为云数据库PolarDB_1实例的集群私网地址,您可在云产品资源列表中查看到PolarDB_1实例的集群私网地址。端口号默认为3306。<数据库账号>和<数据库密码>为第二节中创建的数据库账号test_user和密码Password123。<数据库>为tpch_100。
chmod a+x run_benchmark.sh # 运行的结果在result_1.out和result_1.time中 ./run_benchmark.sh <PolarDB_1集群连接地址> <端口号> <数据库账号> <数据库密码> <数据库> result_1
- 执行如下命令,查看22个查询SQL的运行是时长。
cat result_1.time
- 执行如下命令,统计总用时。
awk -F " " '{sum+=$5} END {print"Total Execution Time =", sum}' result_1.time
5. PolarDB扩容后的TPCH测试
本步骤测试规格为4核8GB的云数据库PolarDB,进行TPCH测试查询22个SQL,云数据库PolarDB的性能。
说明:云起实验室暂不支持对云数据库PolarD进行手动扩容,所以为用户提供了一个4核8GB的云数据库PolarDB,您可直接使用该PolarDB实例进行TPCH测试。在云产品资源列表中可查看该PolarDB实例的实例名称为PolarDB_2,以及集群私网地址。
- 执行如下命令,返回上层目录。
cd ..
- 执行如下命令,连接PolarDB_1集群。
说明:您需要将改为云数据库PolarDB_2实例的集群私网地址,您可在云产品资源列表中查看到PolarDB_2实例的集群私网地址。你需要将<数据库账号>和<数据库密码>改为test_user和Password123。
mysql -h<PolarDB_2集群连接地址> -P3306 -u<数据库账号> -p<数据库密码>
- 依次执行如下命令,创建表、导入数据和设置主外键。
说明:导入数据和设置主外键时长会比较久,大约需要20分钟,请您耐心等待。
source ./dss.ddl source ./load.ddl source ./dss.ri
- 输入exit;并回车退出数据库。
- 执行如下命令,运行create_index.sh脚本,建立索引。
说明:为云数据库PolarDB_2实例的集群私网地址,您可在云产品资源列表中查看到PolarDB_2实例的集群私网地址。端口号默认为3306。<数据库账号>和<数据库密码>为第二节中创建的数据库账号test_user和密码Password123。<数据库>为tpch_100。
./create_index.sh <PolarDB_2集群连接地址> <端口号> <数据库账号> <数据库密码> <数据库>
- 执行如下命令,运行load_index.sh脚本,将索引数据预载到内存池。
说明:为云数据库PolarDB_2实例的集群私网地址,您可在云产品资源列表中查看到PolarDB_2实例的集群私网地址。端口号默认为3306。<数据库账号>和<数据库密码>为第二节中创建的数据库账号test_user和密码Password123。<数据库>为tpch_100。
./load_index.sh <PolarDB_2集群连接地址> <端口号> <数据库账号> <数据库密码> <数据库>
- 执行如下命令,切换到queries目录。
cd queries
- 执行如下命令,运行run_benchmark.sh脚本,运行22个查询SQL。
说明:为云数据库PolarDB_2实例的集群私网地址,您可在云产品资源列表中查看到PolarDB_2实例的集群私网地址。端口号默认为3306。<数据库账号>和<数据库密码>为第二节中创建的数据库账号test_user和密码Password123。<数据库>为tpch_100。
# 运行的结果在result_2.out和result_2.time中 ./run_benchmark.sh <PolarDB_2集群连接地址> <端口号> <数据库账号> <数据库密码> <数据库> result_2
- 执行如下命令,查看22个查询SQL的运行是时长。
cat result_2.time
- 执行如下命令,统计总用时。通过统计结果,我们可以看到4核8GB规格的PolarDB比2核4GB规格的PolarDB的22条查询总用时少,TPCH性能更强。
awk -F " " '{sum+=$5} END {print"Total Execution Time =", sum}' result_2.time
实验链接:https://developer.aliyun.com/adc/scenario/d4eb7252991b4e63b4526020c4c4f404