• 物理机上测试IO是否为瓶颈:

使用一个死循环insert into测试数据库最大写入速度:

use [iTest];

declare @index int;
set @index=0; while @index>=0
begin
set @index=@index+1;
INSERT into [g].[MR]
([TimeStamp],[RTime],[STime],[ETime],[Period],[ObjID],[SID],[CID]
,[Ueid],[GId],[Code],[ScEarfcn],[ScPCI],[ScRSRP],[ScRSRQ]
,[ScRTTD],[ScPHR],[ScAOA],[ScSinrUL],[ScRIP])
VALUES
(GETDATE(),GETDATE(),GETDATE(),GETDATE()
,1,11,22,33,44,44,'',22,33
,44,55,66,77,88,99,00,111,null);
end
GO

结果发现一个问题,写入数据库iTest.mdf的速度只有几百千字节每秒,而写入iTest_log.ldf的速度也是几百字千节每秒,但是写入日志的速度要要多于数据库文件的速度,约在4倍的速度。他们两个之和才有将近1M字节每秒。

而在客户机上,我们采用生成一个文件基本速度也是5M每秒的速度,不管是大文件考别还是小文件拷贝,基本上的速度都是保持在0-70M每秒的速度,显然磁盘在上边测试磁盘的写入速度基本上没有达到饱和程度。

初步判断是sqlserver的内部控制的机制,导致单个表写入有限制,没有使得单个表的写入速度达到系统级别的极限。

  • 测试:

xp_cmdshell 怎么开启

http://www.cnblogs.com/atree/p/SQL_SERVER_xp_cmdshell.html

sp_configure 'show_advanced options',1;
reconfigure
go
sp_configure 'xp_cmdshell',1;
reconfigure
go

bcp 总结:http://rsljdkt.iteye.com/blog/1147707

bcp需要登录账户,数据库服务器\数据库实例信息: http://blog.sina.com.cn/s/blog_7ed5a808010140sl.html

创建格式化文件 (SQL Server):https://msdn.microsoft.com/zh-cn/library/ms191516.aspx

bcp工具使用MSDN文档:https://msdn.microsoft.com/zh-cn/library/ms162802.aspx

使用 BULK INSERT 或 OPENROWSET(BULK...) 导入大容量数据(SQL Server)MSDN文档:https://msdn.microsoft.com/zh-cn/library/ms175915.aspx

use iTest;
exec master..xp_cmdshell 'BCP itest.g.mr out c:/mr.txt -c -S.\work -UN_p_r -PN2' --begin transaction x1
truncate table itest.g.mr;
select top 1 * from itest.g.mr;
exec master..xp_cmdshell 'bcp itest.g.mr in c:/mr.txt -c -S.\work -UN_p_r -PN2'
select top 1 * from itest.g.mr;
--rollback transaction x1;

单个这样的批量入库一版情况下能达到5m每秒速度,30W的记录,入库主表g.mr记录为10W,IO就这样子似乎变得很难提高。

如果是4个这样的批量入库,就可达到16m每秒的速度,确实把入库io占用速度提高了上来。

  •  别人建议:

表分片特性:

1、一个逻辑表;

2、物理文件是多个文件。

比较核查的结果是,sqlserver中基本上是没有分片这一个功能,基本上使用的类似技术包含以下几个:

  • a、表分区(真正意义的分区):partition,这些功能是sqlserver2005以后的版本中出现的功能,在之前的版本是没有该功能的,他的原理就是把一个逻辑上的表分为多个物理文件存储;
  • b、表分区(非真正意义的分区):同一个服务器同一个数据库实例上:把一个逻辑表分为多个物理表,具体实现就是把一个逻辑表在物理上体现为多个表,之后使用union all把这些表合并在一起,作为一个视图的返回结果;
  • c、表切片(分真正意义的切片技术):可以是同一个服务器也可以是不同服务器在不同的数据库实例上:把一个逻辑意义相同的表分布在不同的服务器或者同一个服务器不同的数据库实例上,之后通过sp_addlinkedserver添加远程连接数据库的表,之后把这些表使用union all连接起来,作为一个视图的返回结果。这个应用感觉怪怪的。如果分表就是数量大,当数据量大时,这个技术方案是行不通的,具体未验证过!!!可能会有一些特定的业务需要吧。

备注:

a/b方案详细讲解:http://www.cnblogs.com/zhuawang/archive/2012/07/15/2592368.html

a方案使用讲解:http://wenku.baidu.com/link?url=sEX5NRzEcvjOMYNnE7_5ro9rUwh6cKtJfNTb6iyNM4NycuOThmyOJVyZSs4JhALi2VOU-OYih7YyYYJNj7lnj48CDGNvGy40e48svSg6ao3

a方案赵洁真实使用经验及忠告:http://blog.zhaojie.me/2010/03/sharding-by-id-characteristic.html

a方案使用介绍:http://www.cnblogs.com/knowledgesea/p/3696912.html

b方案msdn讲解:(Creating Distributed Partitioned Views)https://msdn.microsoft.com/en-us/library/ms188299.aspx

-----b方案特别说明:Bulk importing into a partitioned view is not supported by the bcp command, or the BULK INSERT statement, or the INSERT ... SELECT * FROM OPENROWSET(BULK...) statement. However, you can insert multiple rows into a partitioned view by using an INSERT statement.

b方案具体使用实例1:http://blog.csdn.net/kk185800961/article/details/46482769

b方案具体使用实例2:http://www.veryhuo.com/a/view/9534.html

info中提到sqlserver会有真正的切片技术:http://www.infoq.com/cn/news/2011/02/SQL-Sharding,可是所谓的切片就是分区+索引限制吗?

实现快速复制:

可以通过数据管道和外部表也可以实现数据库间的快速复制。

sqlserver类似技术:订阅,推送,和我们要解决数据库写入瓶颈的量级级别不在一个要求水准上。

数据库调优过程(二):找到IO不存在问题,而是sqlserver单表写入IO瓶颈的更多相关文章

  1. 记一次数据库调优过程(IIS发过来SQLSERVER 的FETCH API_CURSOR语句是神马?)

    记一次数据库调优过程(IIS发过来SQLSERVER 的FETCH API_CURSOR语句是神马?) 前几天帮客户优化一个数据库,那个数据库的大小是6G 这麽小的数据库按道理不会有太大的性能问题的, ...

  2. 数据库调优过程(一):SqlServer批量复制(bcp)[C#SqlBulkCopy]性能极低问题

    背景 最近一段给xx做项目,这边最头疼的事情就是数据库入库瓶颈问题. 环境 服务器环境:虚拟机,分配32CPU,磁盘1.4T,4T,5T,6T几台服务器不等同(转速都是7200r),内存64G. 排查 ...

  3. 数据库调优(二)Inner Join Merge Join Hash Match

    T-SQL 的编码习惯以及规范,影响的是查询优化器对执行计划的选择 健壮的SQL语句,更稳定.更高效 SELECT 几个部分: - 查询的数据来自什么表 - 需要查询表中哪些字段 (尽量不使用类似于 ...

  4. Mysql数据库调优和性能优化的21条最佳实践

    Mysql数据库调优和性能优化的21条最佳实践 1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开 ...

  5. MySQL面试必考知识点:揭秘亿级高并发数据库调优与最佳实践法则

    做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离... 数据库的使用,是开发人员的基本功,对它掌握越清晰越深入,你能做的事情就越多. 今天我们用10分钟 ...

  6. [转]10分钟梳理MySQL知识点:揭秘亿级高并发数据库调优与最佳实践法则

    转:https://mp.weixin.qq.com/s/RYIiHAHHStIMftQT6lQSgA 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离 ...

  7. JVM调优(二)——基于JVisualVM的可视化监控

    JVM调优(二)--基于JVisualVM的可视化监控 工具路径://java/jdk1.8xxx/bin/JVisuaVM.exe 监控本地的Tomcat 监控远程Tomcat 监控普通的JAVA进 ...

  8. Mysql数据库调优和性能优化

    1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开源数据库,但是mysql数据库的默认设置性能非常 ...

  9. JVM调优(二)经验参数设置

    调优设置具体解析 堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5 ...

随机推荐

  1. solr4.7中文分词器(ik-analyzer)配置

    solr本身对中文分词的处理不是太好,所以中文应用很多时候都需要额外加一个中文分词器对中文进行分词处理,ik-analyzer就是其中一个不错的中文分词器. 一.版本信息 solr版本:4.7.0 需 ...

  2. add active class

    根据URI添加菜单的active css class Active item item in menu: <?php function aim($page) { if(stristr($_SER ...

  3. 医生加号页改版,就一个Bug, 看医生工作台一期需求

    8/8日报 分级埋点:     [MobClick event:UmengPagePlusDoctor attributes:@{@"page":@"plusPage&q ...

  4. SELECT 'www' = 0; 1

    http://dev.mysql.com/doc/refman/5.7/en/type-conversion.html MySQL 5.7 Reference Manual  /  Functions ...

  5. App之百度云推送

    集成SDK 下载最新的Android SDK压缩包并解压,在新建工程或已有工程中增加百度云推送功能. 我下载的是 ,里面有一个同名的文件夹,文件夹中有 导入云推送jar包和so文件: 将解压后的lib ...

  6. flex mxmlc 手动编译项目

    首先: 1.下载flex的sdk,如果你电脑有装flash builder,它自带了一份,位于安装目录的sdks目录下. 备注:(sdk依赖java的jre) 2.配置mxmlc的java运行环境jr ...

  7. 【iTerm2】美化你的Terminal 赠佛祖像

    我们开发就是喜欢各种酷炫的东西,对于有洁癖的我,连命令行都不放过了 先上图看效果,命令行显示高亮部分 实现过程: 第一步:.bash_prompt脚本 # ~/.bash_prompt # This  ...

  8. spring环境的搭建及作用和定义<一>

    问题?spring的定义及作用.spring的环境搭建 一.spring的定义及作用 1.spring由Rod Johnson创建的一个开源框架,它是为了解决企业应用开发的复杂性而创建的.框架的主要优 ...

  9. docker squid---but git proxy should specify by git config --global http.proxy http:...

    Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.t ...

  10. FW nexus docker

    原文地址: http://www.cnblogs.com/wzy5223/p/5410990.html Nexus 3.0 可以创建三种docker仓库: 1. docker (proxy)     ...