在小公司就职的很多人,相信都没有接触过大数据量的数据库处理。从而数据库几个G就觉得数据库巨大无比。我刚开始做这行也是这样,当时觉得自己的数据库几个G很壮观,但是自从接触了GPS位置平台之后,才发现小的可怜。
当时为了知道单台数据库最大能承载的数据写入速度。用了这样一个不够严谨的方法做的压测sql server数据库写入能力:
1,使用sql语句写一个循环,循环体内固定做数据插入。
2,记录下开始时间,结束时间,循环次数。通过时差和次数,计算出每秒可以写入的数量。
SQL代码如下:
1,创建压测表(建库环节请自行操作,本示例设计表特征为传感器采集类表的部分设计特点:高写入需求,无主键,时间自增聚合索引)
USE [temp]
GO
CREATE TABLE [dbo].[TestTabe](
[TestKey] [datetime] NOT NULL,
[TestValue] [varchar](100) NOT NULL
) ON [PRIMARY]
ALTER TABLE [dbo].[TestTabe] ADD CONSTRAINT [DF_TestTabel_TestKey] DEFAULT (getdate()) FOR [TestKey]
GO
2,循环写入
USE [temp]
GO
--总共循环次数
declare @count int;
set @count = 100000;
--循环次数,递增
declare @i int;
set @i = 0;
--存储循环开始时间
declare @starttime datetime;
set @starttime = getdate();
--存储循环结束时间
declare @endtime datetime;
--计算时间差
declare @timespan decimal;
--循环执行
while (@i<@count)
begin
set @i = @i +1;
--select @i;
--循环写入
INSERT INTO [dbo].[TestTabel]
([TestKey] ,[TestValue])
VALUES
(getdate(),'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789')
end
set @endtime = getdate();
set @timespan = DATEDIFF(s,@starttime, @endtime);
select @timespan;
3,得出结果
--时间:8秒
--写入量:100000行
--单行大小,100字节+8字节
每条数据100+8字节,写入100000条,耗时8秒。得出108字节块大小,iops写入为12500,也就是每秒写入12500行数据
本方法Sql Server压测结果注意:
1,写入速度与表结构设计有直接关系,请自行多做尝试
2,这里的测试结果跟硬盘介质有直接关系,我的硬盘是固态硬盘。数据库文件直接放在物理硬盘上
3,字段类型也会影响表的写入性能,因为非字符串类型,sql解释器会自动进行类型转换
4,本测试方案,仅仅是单线程,实际上可以多线程压测出更好的结果
5,本方案仅仅做一种数据的写入,案例中为100多字节的单行大小,实际业务中显然不会这样,因此现实业务需要更看重随机块大小的IOPS测试结果
6,本方案表结构中只有聚集索引,可以达到最大的写入性能,如果对非聚集索引列增加索引,会下降写入性能。因为sql server在添加数据过程需要同时维护索引。
原文地址:
https://www.opengps.cn/Blog/View.aspx?id=422
文章的更新编辑依此链接为准。欢迎关注源站原创文章!