数据库调优过程(二):找到IO不存在问题,而是sqlserver单表写入IO瓶颈
- 物理机上测试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瓶颈的更多相关文章
- 记一次数据库调优过程(IIS发过来SQLSERVER 的FETCH API_CURSOR语句是神马?)
记一次数据库调优过程(IIS发过来SQLSERVER 的FETCH API_CURSOR语句是神马?) 前几天帮客户优化一个数据库,那个数据库的大小是6G 这麽小的数据库按道理不会有太大的性能问题的, ...
- 数据库调优过程(一):SqlServer批量复制(bcp)[C#SqlBulkCopy]性能极低问题
背景 最近一段给xx做项目,这边最头疼的事情就是数据库入库瓶颈问题. 环境 服务器环境:虚拟机,分配32CPU,磁盘1.4T,4T,5T,6T几台服务器不等同(转速都是7200r),内存64G. 排查 ...
- 数据库调优(二)Inner Join Merge Join Hash Match
T-SQL 的编码习惯以及规范,影响的是查询优化器对执行计划的选择 健壮的SQL语句,更稳定.更高效 SELECT 几个部分: - 查询的数据来自什么表 - 需要查询表中哪些字段 (尽量不使用类似于 ...
- Mysql数据库调优和性能优化的21条最佳实践
Mysql数据库调优和性能优化的21条最佳实践 1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开 ...
- MySQL面试必考知识点:揭秘亿级高并发数据库调优与最佳实践法则
做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离... 数据库的使用,是开发人员的基本功,对它掌握越清晰越深入,你能做的事情就越多. 今天我们用10分钟 ...
- [转]10分钟梳理MySQL知识点:揭秘亿级高并发数据库调优与最佳实践法则
转:https://mp.weixin.qq.com/s/RYIiHAHHStIMftQT6lQSgA 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离 ...
- JVM调优(二)——基于JVisualVM的可视化监控
JVM调优(二)--基于JVisualVM的可视化监控 工具路径://java/jdk1.8xxx/bin/JVisuaVM.exe 监控本地的Tomcat 监控远程Tomcat 监控普通的JAVA进 ...
- Mysql数据库调优和性能优化
1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开源数据库,但是mysql数据库的默认设置性能非常 ...
- JVM调优(二)经验参数设置
调优设置具体解析 堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5 ...
随机推荐
- C# Xml文件操作,解释见注释
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 奥迪--Q3
-型号:Q3 -价格:23-35W -动力:1.4T/2.0T -变速箱:6挡双离合/7挡双离合 -长宽高:4.40,1.84,1.59 -油箱:64L -发动机:EA888 -大灯:氙气(选装LED ...
- easy ui 问题
easyui 的样式 和Bootstrap css 有冲突,不要一起使用 日期禁止输入 editable="false" ------------------------- ...
- 泌尿系统 Excretory system
https://zh.wikipedia.org/wiki/泌尿系统 泌尿系統,有時也歸類於排泄系統(Excretory system)的一部分,負責尿液的產生.運送.儲存與排泄.人類的泌尿系統包括左 ...
- diy-pagination-javascript 分页
<?php isset($_REQUEST['form_single_page_num']) && !empty($_REQUEST['form_single_page_num' ...
- file_get_contents无法获取数据的一种情况
下面这段php代码突然不好使了,返回的 $html 为空,百思不得解.网上说法好多,但都是一家之言,解决不了我的问题.(我的解决方法也是一家之言,只能解决file_get_contents获取不到数据 ...
- html5之canvas初解
<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器) - 必须使用脚本来完成实际的绘图任务. getContext() 方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属 ...
- 【Java 基础篇】【第七课】组合
我所理解的组合就是在一个类当中又包含了另一个类的对象. 这样的方式就是组合吧: 电池是一个类,有电量 手电筒需要电池 看代码吧: // 电池类 class Battery { // 充电 public ...
- Nodejs电影建站开发实例(上)
网站环境:使用express框架.bootstrap样式.jade模板.mongoose数据库 npm insatll express -g npm insatll jada -g npm insat ...
- 返回键 隐藏、、收起键盘textView|textField
/** 隐藏 返回键 的做法,将title置为空 */ self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWith ...