随笔分类 -  mssql

上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 24 下一页
摘要:'SQLServer:Buffer Manager\Page writes/sec' :Number of physical database page writes issued per second我们可以通过这个性能计数器(下文中简称PW)来观察SQLSERVER何时会将脏页(这里不包含日志)写回磁盘。文中讨论的脏页均为数据页,不包含脏日志(虽然SQLSERVER认为日志也是脏的…)Checkpoint: Checkpoint发生是,SQLSERVER会将脏页(包含了未提交事务脏页和已提交事务的脏页)写回磁盘。 Checkpoint的作用是缩短数据库恢复(recovery 阅读全文
posted @ 2012-01-05 12:34 qanholas 阅读(444) 评论(0) 推荐(0) 编辑
摘要:这篇文章主要和大家讨论几乎所有人都熟悉,但不少人又陌生的一条select语句。不知道大家有没有想过到底是什么东西让SQLServer能理解我们写的select。这中间到底发生了什么,是不是有过冲动想去了解。至少我曾经冲动想去了解,但当时主要在研究CLR以及webform相关知识。后来主要精力放在研究SQLserver内部机制,今天就给大家介绍下这条语句。 一、范例数据库脚本 create database Test go alter database Test set recovery simple go use Test go create table Test ( ID int... 阅读全文
posted @ 2012-01-04 21:01 qanholas 阅读(282) 评论(0) 推荐(0) 编辑
摘要:本来是打算先写SQLServer历史的,不过感觉写那部分内容比较难还需要多查些资料。于是调整了下顺序写下简单的Insert语句。数据库结构还是采用上一篇的结构。具体查看上一篇文章擦亮自己的眼睛去看SQLServer之简单Select。今天讨论的语句也比较简单,Insert语句。 一、Insert脚本 insert into Test([Name]) values('xiaojun') 没什么好说的,因为想写这样的语句太简单。 二、 语句分析 这条语句到底发生了什么呢?假设读者已经知道了SQLServer整体架构或者已经阅读过这个系列第一篇文章。当这条语句被可靠的传递到关... 阅读全文
posted @ 2012-01-04 20:59 qanholas 阅读(243) 评论(0) 推荐(0) 编辑
摘要:这几天看了下范伟主演的<<跟踪孔令学>>,再一次欣赏了范伟精湛的演技特别是那种憨厚的表情。看完后,让我想起了SQLServer中的跟踪与反跟踪技术。觉得这部分内容值得写一篇文章和大家分享分享。了解SQLServer跟踪技术能让我们比较简单的在运行时实时的获取SQLServer的内部运作。这种获取方式比我们去使用跟踪标志、动态管理视图等来的方便简单的多。说到跟踪,很多人会想起SQL Profiler。SQL Profiler仅仅是一个GUI,SQL Trace才是本质。SQL Trace是构建服务器跟踪和Profiler的基础。如果你了解到这点,那你就会毫不犹豫的在生产环 阅读全文
posted @ 2012-01-04 20:57 qanholas 阅读(731) 评论(1) 推荐(1) 编辑
摘要:在谈谈SQLServer的锁机制之前,来思考以下这个场景:当你在酷暑的时候骑着自己的小车往目的地行走时,路上连续遇到几个时间很长的红灯,是不是很郁闷?有时候你可能实在受不了闯了个红灯,其实在大部分情况下问题不大,如果通行的汽车很多那就不好说了。因为不遵守规则的人太多,都为了达到目的去走捷径,不愿意等待。这样才有了交警。交警的作用就是维护这些红绿灯的规则。这些红绿灯就像锁一样,锁住或延长你去目的地的时间。但是如果没有交警大家又不自由遵守红绿灯规则会导致什么呢?大家想想都知道。 这个系列的一篇文章中提供的事务管理器中有个锁管理器就是这里的交警。它维护着SQLServer中的锁。前段提到的大部分情. 阅读全文
posted @ 2012-01-04 20:26 qanholas 阅读(325) 评论(0) 推荐(0) 编辑
摘要:跟踪标志说明260打印有关扩展存储过程动态链接库 (DLL) 的版本控制信息。有关__GetXpVersion()的详细信息,请参阅创建扩展存储过程。作用域:全局或会话1204返回参与死锁的锁的资源和类型,以及受影响的当前命令。作用域:仅全局1211基于内存不足或基于锁数禁用锁升级。SQL Server 数据库引擎不会将行锁或页锁升级到表锁。使用此跟踪标志可生成过多的锁数目。这样会降低数据库引擎的性能,或因为内存不足而导致 1204 错误(无法分配锁资源)。有关详细信息,请参阅锁升级(数据库引擎)。如果同时设置了跟踪标志 1211 和 1224,则 1211 优先于 1224。但是,由于在所有 阅读全文
posted @ 2012-01-04 20:22 qanholas 阅读(876) 评论(0) 推荐(0) 编辑
摘要:例子:SET TRANSACTION ISOLATION LEVEL READ COMMITTED;BEGIN TRANSACTION; SELECT * FROM User2行版本控制隔离:优势使用行版本控制的隔离级别具有以下优点:· 读取操作检索一致的数据库快照。· SELECT 语句在读取操作过程中不锁定数据(读取器不阻塞编写器,编写器也不阻塞读取器)。· SELECT 语句可以在其他事务更新行时访问最后提交的行值,而不阻塞应用程序。· 死锁的数量减少。· 事务所需的锁的数量减少,这减少了管理锁所需的系统开销。· 锁升级的次数减 阅读全文
posted @ 2012-01-04 19:50 qanholas 阅读(2564) 评论(0) 推荐(0) 编辑
摘要:--认清SQL_Server_2005的基于行版本控制的两种隔离级别--By:zc_0101 Date:2010-03-31--快照隔离级别(snapshot)和已提交读快照隔离级别(readcommittedsnapshot)--特点:在这两种隔离级别下,读取数据时不再请求共享锁,而且永远不会与修改进程的数据发生冲突,如果请求的--行被锁定(例如正在被更新),SQL_Server会从行版本存储区返回最早的关于该行的记录(SQL_server会在--更新时将之前的行数据在tempdb库中形成一个链接列表,当然目前我没有搞清楚之前的数据到底存到了那里)--这两个快照提供了乐观的并发模型--说明: 阅读全文
posted @ 2012-01-04 17:51 qanholas 阅读(776) 评论(1) 推荐(0) 编辑
摘要:对象①锁:每条SQL语句②隔离:事务锁①并发问题丢失更新未确认的读取(脏读)不一致的分析(非重复读):多次读取相同的数据(行)不一致(其他用户更改update)幻像读:多次读取有不存在和新增的数据(其他用户插入insert或删除delete)隔离级别隔离级别脏读不可重复读取幻像说明未提交读(readuncommitted)是是是如果其他事务更新,不管是否提交,立即执行提交读(readcommitted默认)否是是读取提交过的数据。如果其他事务更新没提交,则等待可重复读(repeatableread)否否是查询期间,不允许其他事务update可串行读(serializable)否否否查询期间,不 阅读全文
posted @ 2012-01-04 17:03 qanholas 阅读(3377) 评论(0) 推荐(2) 编辑
摘要:存储过程:SET Transaction Isolation Level Read语法的四种情况这几天一直在弄存储过程,现在在这里跟大伙共享下资料:SET Transaction Isolation Level Read UNCOMMITTED使用这句东东呢可以分为四种情况,现在就在这里逐一介绍:第一种情况:READ COMMITTED这句的作用是:指定在读取数据时控制共享锁以避免脏读,但数据可在事务结束前更改,从而产生不可重复读取或幻像数据。该选项是 SQL Server 的默认值。第二种情况:READ UNCOMMITTED 这句的作用是:执行脏读或0级隔离锁定,这表示不发出共享... 阅读全文
posted @ 2012-01-04 16:10 qanholas 阅读(38946) 评论(0) 推荐(8) 编辑
摘要:数据库是要被广大客户所共享访问的,那么在数据库操作过程中很可能出现以下几种不确定情况。更新丢失(Lost update) 两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修改都失效了。这是因为系统没有执行任何的锁操作,因此并发事务并没有被隔离开来。脏读(Dirty Reads) 一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交。这是相当危险的,因为很可能所有的操作都被回滚。不可重复读(Non-repeatable Reads) 一个事务对同一行数据重复读取两次,但是却得到了不同的结果。它包括以下情况: (1) 事务T1读取某一数据... 阅读全文
posted @ 2012-01-02 15:24 qanholas 阅读(26682) 评论(0) 推荐(5) 编辑
摘要:锁的概述一.为什么要引入锁多个用户同时对数据库的并发操作时会带来以下数据不一致的问题:丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统脏读A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致不可重复读A用户读取数据,随后B用户读出该数据并修改,此时A用户再读取数据时发现前后两次的值不一致并发控制的主要方法是封锁,锁就是在一段时间内禁止用户做某些操作以避免产生数据不一致二锁的分类锁的类别有两种分法:1.从数据库系统的角度来看:分为独占锁(即排它锁),共享 阅读全文
posted @ 2011-12-30 11:55 qanholas 阅读(588) 评论(0) 推荐(0) 编辑
摘要:无论是有意无意,如果事务在数据库中保持打开,则它会阻塞其他进程对修改后的数据进行操作。同样,对事务日志进行备份也只会截断不活动事务的那部分事务日志,所以打开的事务会导致日志变多(甚至达到物理限制),直到事务被提交或回滚。要找到最早的活动事务,可以使用DBCCOPENTRAN命令。详细用法见MSDN:http://msdn.microsoft.com/zh-cn/library/ms182792.aspx给出一个示例:CREATETABLET_Product(PKIDint,PNameNvarchar(50));GOBEGINTRANINSERTINTOT_ProductVALUES(101,& 阅读全文
posted @ 2011-12-29 17:02 qanholas 阅读(567) 评论(0) 推荐(0) 编辑
摘要:SQL Server2008提供了一个增强的SQL命令Merge,用法参看MSDN:http://msdn.microsoft.com/zh-cn/library/bb510625.aspx功能:根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。我们看一个例子,假如,有一总产品列表,一个分店产品列表,需要从分店添加产品时更新总产品列表。总产品表,分店产品表结构完全一致:ifOBJECT_ID('Demo_AllProducts')isnotnulldroptableDemo_AllProd 阅读全文
posted @ 2011-12-29 16:37 qanholas 阅读(304) 评论(0) 推荐(1) 编辑
摘要:SQLServer2008中新增功能:可以使用单个Insert命令插入多行。CreatetableDemo_Values(PKIDintnotnullidentity(1,1)primarykey,DNameNvarchar(20)null,DCodeNVarchar(30)null,DDatedatetimenull)go--thisSQLisonlyforSQLServer2008InsertintoDemo_Values(DName,DCode,DDate)values('DemoA','AAA',GETDATE()),('DemoB',& 阅读全文
posted @ 2011-12-29 16:32 qanholas 阅读(330) 评论(0) 推荐(0) 编辑
摘要:1.正常启动SQLSERVER 2008服务net start mssql$sql20082.使用SQL Server Management Studio 登陆SQL SERVER 20083.SQLSERVER 2008服务停止了4.查看windows事件,日志如下a.在文件 'D:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\templog.ldf' 中、偏移量为 0000000000000000 的位置执行 读取 期间,操作系统已经向 SQL Server 返回了错误 38(已到文件结尾。)。 阅读全文
posted @ 2011-12-28 11:32 qanholas 阅读(6378) 评论(3) 推荐(0) 编辑
摘要:步骤:I.创建基本的Service Broker对象: 在ServerA的DatabaseA里,让我们执行下面的操作:1)创建消息类型Create Message Type SenderMessageType validation=NONE Create Message Type ReceiverMessageType validation=NONE2)在上面的消息类型上创建约定Create Contract SampleContract( SenderMessageType SENT BY INITIATOR, ReceiverMessageType SENT BY TARGET)3)创建一 阅读全文
posted @ 2011-12-26 14:36 qanholas 阅读(540) 评论(0) 推荐(0) 编辑
摘要:有时,我们需要获得某张表所有的元数据,我们可能想到的是通过查询系统表获得,但是这比较繁琐,而在SQL Server2005(包含)以后,提供了一个比较简单的操作,只返回表的所有元数据,而没有行数据,它就是SET FMONLY {ON|OFF}命令。如图: 如果执行的时候打开执行计划(CTRL+M),也不会返回带有执行计划的标签(如上图)。 阅读全文
posted @ 2011-12-22 14:47 qanholas 阅读(313) 评论(0) 推荐(0) 编辑
摘要:网址: http://www.g-productions.nl/index.php?name=sysdatabasesSQL Server在版本切换时,经常会有新的命令,或系统视图替代旧版本的视图和存储过程,或命令。同时老的还保留几个版本.如: sysdatabases系统视图是sql2000的系统视图,但在2005和2008上,已经修改为了sys.databases和sys.master_files两个对应的视图.如下图(查询系统存储过程 sp_addlinkedsrvlogin存储过程): 阅读全文
posted @ 2011-12-20 16:34 qanholas 阅读(317) 评论(0) 推荐(0) 编辑
摘要:如果用附加或者恢复备份的方法把数据库从一个电脑移动到另外一个电脑,数据库的用户和SQL的登录会冲突,登录没有办法和用户关联,造成孤立用户. 为了解决这个问题,首先在目标SQL系统上建立与用户同名的登录,然后在数据库上执行下面指令把用户和登录关联use 数据库sp_change_users_login 'update_one', 'my_dbuser', 'my_sqllogin'(数据库用户my_dbuser 和 "SQL Server登陆名"my_sqllogin 关联)如果数据库预先设置了大量的用户权限,可以用这个方法方便 阅读全文
posted @ 2011-12-20 16:31 qanholas 阅读(366) 评论(0) 推荐(0) 编辑

上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 24 下一页