随笔分类 -  SQL Server 开发

1
摘要:页并发访问的保护:闩锁 在多线程并发情况下,需要防止读线程读到写线程正在写的资源,在编程中,通过使用互斥器(Mutexes), 信号量(Semaphore), 临界区(Critical Section)和事件(Event Object)来保护资源,而这些机制在SQL Server中被统一表示为 闩锁 阅读全文
posted @ 2016-08-15 17:15 Joe.TJ 阅读(658) 评论(2) 推荐(2) 编辑
摘要:查询执行的总图: 根据总图的流程,详细说明每个部分: 1. 请求(Request) SQL Server是C/S架构的平台。与它交互的唯一方式就是发送包含数据库命令的请求。应用程序和数据库之前的通信协议叫做TDS(Tabular Data Stream)协议。应用程序可以使用以下几种实现了TDS协议 阅读全文
posted @ 2016-08-11 18:07 Joe.TJ 阅读(1127) 评论(0) 推荐(3) 编辑
摘要:什么是SIX锁? 官方文档锁模式中说到: 意向排他共享 (SIX):保护针对层次结构中某些(而并非所有)低层资源请求或获取的共享锁以及针对某些(而并非所有)低层资源请求或获取的意向排他锁。 顶级资源允许使用并发 IS 锁。 例如,获取表上的 SIX 锁也将获取正在修改的页上的意向排他锁以及修改的行上 阅读全文
posted @ 2016-06-12 16:06 Joe.TJ 阅读(3454) 评论(2) 推荐(2) 编辑
摘要:测试和分析依据上文件最小化日志的判断逻辑,对常见的BULK INSERT和INSERT INTO...SELECT做测试和分析 创建测试环境和基准--创建表tb_source并插入10000条数据use mastergocreate database test;alter database test... 阅读全文
posted @ 2015-11-17 17:14 Joe.TJ 阅读(1073) 评论(6) 推荐(1) 编辑
摘要:什么是最小化日志(Minimal Logging)? 当数据库的恢复模式为SIMPLE或者BULK_LOGGED时,对于最小化日志类型的操作,事务日志不记录单独每个数据行的日志,而是记录对应页和区结构的修改日志。这样显著减少了操作产生的事务日志数量。例如,向某个数据页上插入200行数据,在最小化日志... 阅读全文
posted @ 2015-10-31 10:33 Joe.TJ 阅读(687) 评论(0) 推荐(1) 编辑
摘要:堆的修改需要使用到PFS页(PageFreeSpace)。PFS记录着数据页的空间使用情况。PFS页上使用1个字节(Byte)表示一个页的使用情况。一个PFS页可以表示8088个数据页,于是每8088个数据页就会有一个PFS页。一个数据文件的第二个页就是PFS页。PFS页上1个字节的结构:Bit ... 阅读全文
posted @ 2015-08-28 10:27 Joe.TJ 阅读(907) 评论(2) 推荐(1) 编辑
摘要:1. 表A有5行数据,表B有7行数据,问Inner Join最多返回几行数据,Left Join最多返回几行数据,分别在什么情况下? Inner Join 是返回关联表的Cartesian product,然后根据On条件剔除掉不符合的行。这样的话,返回最多行的情况就是保留整个Cartesian p 阅读全文
posted @ 2014-07-23 16:50 Joe.TJ 阅读(2666) 评论(9) 推荐(0) 编辑
摘要:背景 事务复制中发布表有分区表,如何配置发布项,使分区结构传播到订阅库?有何限制? 测试环境 CodeUSE [master]GOCREATE DATABASE [OMS_Test] ON PRIMARY ( NAME = N'OMS_Test_data1', FILENAME = N'C:\P... 阅读全文
posted @ 2014-07-16 16:07 Joe.TJ 阅读(1591) 评论(3) 推荐(1) 编辑
摘要:SQL Server创建索引时,可以指定Unique使之成为唯一索引。“唯一”顾名思义,但是两都到底有什么区别呢?因为索引也是一种物理结构,所以还是要从存储和结构上分析。 索引结构分叶级和非叶级,分析时我们要分开来看,这个很重要。 文中涉及的索引行大小计算,参考MSDN估计数据库大小索引部分。 1. 非唯一聚集索引和唯一聚集索引 创建两个测试表,各10000条整数,tb1唯一,tb2非唯一,有1000条为9999的重复值。 Codecreate table tb1(col1 int);declare @i int=1while @i90000go由前文的分析可知上图所有索引的minSize和. 阅读全文
posted @ 2014-02-28 15:11 Joe.TJ 阅读(22647) 评论(5) 推荐(6) 编辑
摘要:某一个镜像会话中的主库所在服务器磁盘容量不足了,现要新添加一个磁盘分区用于扩容。通常的做法是:加完分区后,添加新数据文件(或者新文件组)到新分区,之后再重做镜像。如果此库比较大,则重做镜像会是件耗时和拖累性能的事情。会不会有更好的方法呢?在实际操作中,我以”数据库文件布局方式”分为三种情况:1. 主库和镜像库的文件布局一样,而且新增加分区盘符在两台机上都存在。 “一样”指mdf/ndf和ldf文件目录地址相同。在创建镜像时,还原数据库未指定“MOVE”则会一样。如主库包含C:\DB_Test\Mirror_test_data.mdf和C:\DB_Test\Mirror_test_log.ldf 阅读全文
posted @ 2013-04-08 18:26 Joe.TJ 阅读(1539) 评论(2) 推荐(1) 编辑
摘要:有时候会查询一下实例下所有数据库文件的可用空间,SSMS上没有汇总的地方,仪表盘又只日志文件的可用空间,于是写了一个SP自己用./** author:Joe.TJ date:20130328 desc:get the free space of database file**/create proc usp_GetFreeSpaceasset nocount on;declare csr cursor for select name from sys.databases where database_id>4;declare @cmd varchar(2000);declare @db 阅读全文
posted @ 2013-03-28 15:07 Joe.TJ 阅读(550) 评论(0) 推荐(0) 编辑
摘要:最近新建立了多个热备镜像,于是把如何管理和监控镜像的认识总结一下。镜像在建立好之后,就需要去管理其运行状况。最重要是性能状况评估和关键指标的自动监控警报。 1. 首先我们要获取镜像状态的信息,才能做出判断或者监控。要获取这些信息,就要了解两个重要的镜像监控组件:数据库镜像状态表和数据库监控作业。 1 阅读全文
posted @ 2012-09-06 12:27 Joe.TJ 阅读(3728) 评论(3) 推荐(7) 编辑
摘要:事务复制的发布库同时也是镜像的主库,测试的目的是当镜像发生故障转移时,事务复制关系是否能同时自动转移。环境:JOEPC\SQLJOEC,DB_TEST1,DB_TEST2_VM三台机都是Win2008_R2_SP1+SQLServer2008_R2_SP1. JOEPC,DB_TEST1都是物理机,DB_TEST2_VM是建立在DB_TEST1上的虚拟机。关系说明:JOEPC\SQLJOEC是镜像关系的主体,是事务复制关系的发布者, DB_TEST1是镜像关系的见证者,是事务复制的分发者和订阅者, DB_TEST2_VM是镜像关系的镜像端。1. 首先在JOEPC\SQLJOE上创建测试库和表。 阅读全文
posted @ 2012-06-19 15:38 Joe.TJ 阅读(1985) 评论(4) 推荐(1) 编辑
摘要:生产环境要上镜像,自己又做了一遍测试,总结记录一下。 目的:实现关键数据库的热备和故障自动切换。 环境:Win2008_R2_X64,SQLServer2008_R2_X64,WorkGroup网络模式。 数据库:people 主机:192.168.1.3 镜像机:192.168.1.110 见证机:192.168.1.111 准备工作: 打开每个实例的RemoteDACEnable.方法:SSMS选中实例右键Facets(方面)在Facet列表选中"Surface area configuration"设定"RemoteDacEnabled"为 阅读全文
posted @ 2012-04-06 11:39 Joe.TJ 阅读(2449) 评论(4) 推荐(2) 编辑
摘要:在使用的分区表中,遇到一些问题,也想到一些问题。就一起总结起来。1. 像主表--从表,这种结构才应用同样的分区架构和分区函数,如订单主表--订单详细表。 这样可以存储对齐,于IO和联接查询性能都有提升。 但是如果两张不相关的表,最好不要用同样分区架构和分区函数。因为在对其中一张表做分区结构调整时,会同样作用到另一张表。2. 每个分区对应一个不同的文件组,并置于不同的物理磁盘。这是官方的最佳实践。 但是,我在实践中发现这样管理起来很不方便。比如,订单表,保留最近12个月的数据,分成12分区。订单存档表,因为量太大,可能会按三年前一个分区, 最近三年每年一个分区,共四个分区。这样当把订单表... 阅读全文
posted @ 2011-12-02 21:50 Joe.TJ 阅读(2448) 评论(3) 推荐(2) 编辑
摘要:SQL SERVER 分区表的总结--分区表的维护和管理在依据需求建立好分区表之后,就要实现对分区表的管理维护。主要内容就是两点:1. 利用滑动窗口方案(Sliding Window Scenario),实现分区表与数据移动中间表的互切。2. 分区表本身的结构变更管理。当然以上两点,都是理论上的点。我工作中主要是遇到两种需求:1. 过时分区数据的快速归档管理:即把某些不活跃分区的数据切到数据归档的表中去。2. 分区表由于数据增长需要添加新分区来处理数据:即已分区的表它所有的数据都会处于活动状态,需要新的分区来承载新增的数据。这两种需求将会在下面的代码体现出来。分区表沿用我上一篇中的表Produ 阅读全文
posted @ 2011-12-02 13:42 Joe.TJ 阅读(3150) 评论(1) 推荐(4) 编辑
摘要:前些日子有处理过一些XML的数据,后来看书时,记得有一种XML拆分数组的方法,这两天大量用到。就记录一下。--例子是分折一个ip地址,得到每一段的值,当然也可以是其它类数据的数据或列:a-b-c-d或者3,4,5,6之类的declare @ip varchar(15);set @ip='192.168.1.123'--把字串转成XMLdeclare @ipx xml;set @ipx=CONVERT(xml,'<x>'+REPLACE(@ip,'.','</x><x>')+'</x 阅读全文
posted @ 2011-11-10 17:34 Joe.TJ 阅读(326) 评论(0) 推荐(0) 编辑
摘要:最近一个项目要做彻底改版,数据库需要重构。结果收到一堆WORD的字典表,按上面的要求开库建表。类似于这种:正常情况下,接下来就是手指运动,Ctrl+C和Ctrl+V在Word和PowerDesigner之间运动。手都酸了,于是就想:有没有办法批量导入呢?于是GOOGLE一下,发现了一篇参考文章:http://www.cnblogs.com/pc-funning/archive/2009/01/21/1379537.html.然后就自己开始捣鼓捣鼓。。。先把word内容贴到Excel里,然后再把Excel另存为用制表符分隔的CSV文件,然后再用txt打开此CSV文件,再整理了一下格式。但是用制. 阅读全文
posted @ 2011-11-03 17:17 Joe.TJ 阅读(1231) 评论(0) 推荐(0) 编辑
摘要:今天把用PD设计好的一堆表,生成SQL脚本,在数据库上做生成测试。发现所有默认值约束,居然全部不符合命名规范。 没有在PD当中找到解决问题的方法,只好在数据库端想办法,想了一下写一个SP,经测试能解决我的问题。 特记录如下: 阅读全文
posted @ 2011-11-02 15:33 Joe.TJ 阅读(491) 评论(0) 推荐(0) 编辑
摘要:上午在找Bulk Insert的资料看,还转了一篇。不巧今天下午就用上了,我遇到的需求是导出表A中的N个字段,然后导入到表B的N个字段当中。根据一般做法的话,导出部分字段时没有办法生成格式化XML文件,所以导入时就没有办法格式化导入数据。我想到两点,1.手工修改格式化XML文件,2.创造一个能生成格式化XML文件的中间对象。在MSDN中寻找方法时,突然想到可以使用视图来做中间对象,于是就搭一个测试下。以下是测试记录:USE masterGOCREATE DATABASE [db_test] GO USE db_testGOCREATE TABLE dbo.T_test( ID [i... 阅读全文
posted @ 2011-10-05 17:51 Joe.TJ 阅读(1065) 评论(0) 推荐(0) 编辑

1