HammerDB测试SQL Server

 

 

  1. TPC-H概念

不同数据规模下比较是没有意义的。

HammerDB测试结果和官方发布工具性能结果不能直接对比。

 

 

    1. TPC-H schema

 

 

  1. 预置条件

安装SQL SERVER,HammerDB工具。

HammerDB工具,官网下载:http://www.hammerdb.com/ ,直接安装WINDOWS版本即可。

  1. 安装SQL Server
  1. 通过操作系统光盘镜像安装.NET Framework.
  2. 增加 add features, 通过安装的ISO镜像
  3. 安装SQL SERVER(双机安装程序)
    1. New SQL Server stand-alone installation
  4. 选择
    1. Shared Featrues
      1. Client Tools Connectivity
      2. Manangement Tools –Complete
    2. 服务配置
      1. 改变“SQL Server Database Engin” 服务从自动到手动
      2. 改变账户名“Administrator”,输入管理员密码
    3. 定制化
      1. 选择“Windows collation designator and sort order”
      2. Select collation designator=”Latin1_General”
      3. Select binary sort order
    4. 数据库引擎
      1. 服务配置页
        1. Mixed Mode
        2. 输入管理员账户
        3. 点击[add current user]
    5. 错误报告,确保unchecked
  1. 启动数据库

使用Sql Server Configuration Manager启动数据库(PS:该工具和创建数据库所用工具在安装SQL SERVER时候就已经安装完毕)

  1. 创建数据库

打开Microsoft SQL Server Management Studio,如下图

点击链接后如下图:

右击如下图:

如下图:

  1. TPC-H测试
    1. 创建数据库目录

C盘创建mp文件夹

运行如下脚本:rc6.bat

其中rc.bat如下:

PS:rc.bat和rc6.bat需要放在C盘方可。

其中bk放备份文件,fx固定大小的文件,gw放测试过程会成长的文件。

    1. 格式化磁盘

确定哪些磁盘用于备份,哪些磁盘用固定大小,哪些磁盘用于数据成长。

本次测试共

2个1.8T磁盘用于GW

2个750G磁盘用于FX

3个300G用于BK

1个3.2T用于LOG

其中SIZE大小是MB单位。

文件如下:Create.txt

执行:

#diskpart /s create.txt

    1. 格式化

后续SQL Server不支持裸盘,需要格式化一下

脚本如下:

双击运行即可。

    1. 数据库配置
      1. 开启数据库内存大页

执行LargepagesfORtEXT_SQL2012.reg

管理工具

本地安全策略

        1. 账户策略;密码策略
          1. 关闭密码复杂度
          2. 密码最长年限改成 0
        2. 本地策略;用户指派;锁定内存
          1. 增加管理组“Administrator”

注销后重新登录,此更改才生效。

      1. 设置性能相关模式

系统设置

设置性能“best performance”

设置DEP only for essential Windows programs and services

电源管理

            选择High performance

      1. 启动数据库

StartSQL.bat

      1. 连接SQL Server

使用SMSS工具来连接数据库。

      1. 数据库参数

执行SQLconfig.sql文件。

sp_configure 'show advanced options',1

go

reconfigure with override

go

sp_configure 'max server memory',960320

go

reconfigure with override

go

sp_configure 'priority boost',1

go

reconfigure with override

go

sp_configure 'recovery interval',32767

go

reconfigure with override

go

sp_configure 'remote login timeout',0

go

reconfigure with override

go

sp_configure 'remote query timeout',0

go

reconfigure with override

go

sp_configure 'lightweight pooling',1

go

reconfigure with override

go

sp_configure 'max degree of parallelism',0

go

reconfigure with override

go

sp_configure 'default trace enabled',0

go

reconfigure with override

go

sp_configure 'Agent XPs',0

go

reconfigure with override

go

sp_configure 'awe enabled',0

go

reconfigure with override

go

sp_configure 'backup compression default', 0

go

reconfigure with override

go

      1. 创建数据库

查看create_database.sql文件,修改并执行。

然后执行change_database.sql文件,改变字符集。

      1. 创建临时文件

3.2T盘,做两个卷,一个750G,E:用于放日志

另一个F:用于放TEMP文件。

查看tempdb.sql文件,修改并运行。

如要移除修改的temp文件,查看shrinktempdb.sql文件

或者修改路径和大小

分别执行:modify-tempfile.sql (重启数据库)和modify-tempfile-size.sql

 

      1. 导入数据

打开TPC-H测试工具,如下图:

点击OK即可。

 

      1. 导入100规模尝试

导入耗时取决于磁盘IO好坏。

导入300规模,花费14个小时。

      1. 删除临时文件

执行shrinktmepdb.sql

  1. 备份数据库

备份数据库命令如下:

 

  1. 恢复数据库

  1. 测试
    1. 测试

DOP取决于系统拥有的CPU数量。

      1. 测试最佳实践

100 规模,9008下:

DOP用16

并发用户 5个。

1000规模,RH5885HV3:

 

 

      1. 参数

MAXDOP对TPC-H非常重要。

如果没有使用列式存储那么设置成16就可以了。如果使用了列存储则该值越高越好。

    1. 并发数量

TPC-H有两个测试,一个是power测试使用1个用户,一个是吞吐量测试需要一个固定值,1000规模下需要至少7个用户并发。

    1. 关闭数据库

运行stopSQL

    1. 删除数据库

参看文件remove_database.sql文件。

 

 

 

 

 

  1. 最佳实践分配

300 SCALE FACTOR规模需要3张SSD(2张INTEL卡,1张华为ES3000 V2)

INTEL卡的一般空间用于导入数据,另一半用户临时表空间。华为卡三分之一用于存放日志,三分之一用于系统自带临时表内容,三分之一用于系统自带临时表日志。

 

 

 

 

 

 

 

 

 

 

  1. 附件如下

  1. 测试结果计算

下载http://www.hammerdb.com/hammerdb_tpch_calculator.xlsx  得到

hammerdb_tpch_calculator.xlsx

先测试一个用户的压力得到POWER值

The refresh function checkbox corresponds to refresh on in the Driver Script. When this checkbox is enabled the first virtual user will run the refresh function as opposed to running a query set. Note that if you choose only one virtual user and select the refresh function checkbox then your virtual user will run a power test as detailed further in this document.  The refresh function as the name implies inserts and deletes rows from the ORDERS and LINEITEM tables an the times of this function are required as input to calculating the QphH.

如下图,修改SF,并发用户数量,以及运行最长的时间,填入后自动生成结果如下图。

 

 

  1. 问题汇总
    1. 删除临时文件

临时文件不为空,无法删除。Error:5042

答:

MS SQL Server中有本地临时表和全局临时表两种:

本地临时表仅在当前会话中可见,以符号#开头(如#tableName);

全局临时表在所有会话中都可见,以符号##开头(如##tableName)。

正确的临时表删除操作
if object_id('tempdb..#tempTable') is not null Begin

Drop table #tempTable

  • End

正解:

先查看表中内容如下:

SELECT DB_NAME() AS DbName, name AS FileName, size/128.0 AS CurrentSizeMB,

size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0 AS FreeSpaceMB

FROM sys.database_files;

如下图:

在收缩前,需要确保此文件里不会有临时表等临时文件,因此需要将这些全部删除之后再进行收缩,收缩脚本:

USE tempdb

GO

DBCC SHRINKFILE (tempdev3, EMPTYFILE); -- to empty "tempdev3" data file

GO

收缩完毕之后,将该文件删除,脚本如下:

ALTER DATABASE tempdb

REMOVE FILE tempdev3; --to delete "tempdev3" data file

GO

还是不行就删除使用的数据库再创建

  1. TOP10等待事件

SELECT TOP 10

[Wait type] = wait_type,           --等待状态

[Wait time (s)] = wait_time_ms / 1000,        --等待时长

[% waiting] = CONVERT(DECIMAL(12,2), wait_time_ms * 100.0 / SUM(wait_time_ms) OVER())

FROM sys.dm_os_wait_stats WHERE wait_type NOT LIKE '%SLEEP%' --AND wait_type NOT LIKE 'CLR_%' ORDER BY wait_time_ms DESC;

 

 

 

    1. 移动TEMP文件路径

USE master;

GO

ALTER DATABASE tempdb  

MODIFY FILE (NAME = tempdev, FILENAME ='E:\SQLData\tempdb.mdf');

GO

ALTER DATABASE tempdb

MODIFY FILE (NAME = templog, FILENAME ='E:\SQLData\templog.ldf');

GO

验证文件更改。

SELECT name,physical_name

FROM sys.master_files

WHERE database_id = DB_ID('tempdb');

    1. 临时文件损坏无法启动

One or more files do not match the primary file of the database.

答:数据库损坏,卸掉SQL SERVER重装,然后恢复数据库。

    1. 查看SQL Server执行计划

SSMS允许我们查看一个图形化的执行计划(快捷键Ctrl+L)。注意当查看一个执行计划的时候,查询并没有运行。一些度量值只能在运行完之后才能得到(实际查询得到的行的数目)。

    1. 查看索引

执行query_for_index.sql

    1. 创建列式索引

执行create_column_index.sql

    1. 确认列式索引

执行excution_pan_check.sql

#select count(*) from lineitem;

创建列式索引后如下:

最后走的索引发生了变化。

    1. 增加数据库用户

SSMS连接上,点击security,logins,邮件新增即可。

    1. 数据库启动TRACE FLAG

https://msdn.microsoft.com/zh-cn/library/ms190737.aspx

https://technet.microsoft.com/zh-cn/library/ms188396(v=sql.105).aspx

 

你可能感兴趣的:(HammerDB测试SQL Server)