Microsoft SQL Server 6.5 技术内幕 笔记
Microsoft SQL Server 6.5 技术内幕 笔记
目录
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
第一部分
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
ORACLE
内存分配(SGA和PGA)
SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
f
f
f
f
每个线程55KB的内存
f
f
f
f
f
f
f
f
f
ole:object linking and embeding
f
f
f
f
f
f
f
f
f
f
f
f
SQL Executive就是现在的SQL Agent
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
网络输出缓冲区跟传输的包大小相同:4096字节
f
f
f
f
f
f
f
f
f
oracle规则优化器
f
sql2005之前用的规范化,sql2005开始使用代数化
f
f
(ISAM——索引顺序访问方法)它是一种索引机制,用于高效访问文件中的数据行。
(ISAM——索引顺序访问方法)是Indexed Sequential Access Method(索引顺序存取方法)的缩写 是IBM公司发展起来的一个文件操作系统,可以连续地(按照他们进入的顺序)
或者任意地(根据索引)记录任何访问。
每个索引定义了一次不同排列的记录。一个职工数据库基于搜寻的信息可以有几个索引。
例如,按照职工所属科室的部门索引中,同时还有按照职工姓氏字母顺序排名的名字索引。每个索引中的关键词都是制定的。
对于职工名字字母顺序索引,姓就是指定的关键词。
ISAM的开发早于VSAM(虚位存储通道法)。
f
逻辑页码
f
以前磁盘小,所以数据页占用2KB
f
f
f
SQLSERVER6.5只实现了3个隔离级别:不包括repeatable read
f
f
f
f
f
f
SQLSERVER 更新数据行的三种方式:
原位更新:行大小跟原来一样
页内更新:行大小跟原来不一样,但行数据还保留在原数据页
完全更新:行大小跟原来不一样,行数据已经在另一个数据页,要修改整个索引
f
f
f
数据页面的预分配
如果是堆表就不会重新利用删除了的行的空间
f
f
f
f
f
f
rubbing:类似于mysql的 gap锁
f
索引B TREE长高,树长高的原理,索引的分裂 ,树长高
f
f
--重建索引的时候改变填充因子 ALTER INDEX [ix_counttb_id] ON [dbo].[counttb] REBUILD WITH (FILLFACTOR = 80)
f
SQLSERVER6.5的时候,缓冲区管理器也叫日志写入器,管理buffer pool和log write (LGWR)
f
f
f
SHUTDOWN WITH NOWAIT
f
sysindexes表
f
F
DBCC PINTABLE(DB_ID('test'),OBJECT_ID('test.dbo.test')) --SELECT DB_ID('test') --SELECT OBJECT_ID('test.dbo.test') --* DBCC PINTABLE (db_id,object_id) --将表数据驻留在内存中
F
DBCC PINTABLE会不会把表放到LRU 列表中 LRU LIST
F
F
F
F
mysql也是使用hash来快速访问内存中的页面的
F
EXEC sys.[sp_configure] @configname = 'advanced options', -- varchar(35) @configvalue = 1 -- int RECONFIGURE WITH OVERRIDE --HASH buckets --DBCC BUFCOUNT --DBCC SQLPERF(HASHSTATS)
F
F
F
f
f
f
f
f
f
f
F
F
sp_repldone [ @xactid = ] xactid , [ @xact_seqno = ] xact_seqno [ , [ @numtrans = ] numtrans ] [ , [ @time = ] time [ , [ @reset = ] reset ]
EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1 注意 可以在紧急情况下使用此过程,以允许在有事务挂起复制时截断事务日志。使用此过程可防止 Microsoft® SQL Server™ 2000 在未发布和重新发布数据库之前复制数据库。
F
F
F
F
F
f
f
f
f
iocompletion 端口跟iocompletion等待不一样,iocompletion等待是物理I/O等待
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
charset这些工具在sqlserver2012里是没有的
f
f
二进制排序,bin
f
f
f
f
f
f
f
f
f
f
f
f
SELECT * FROM sysdevices SELECT * FROM sys.backup_devices EXEC sys.[sp_helpdevice] @devname = -- sysname
f
f
f
f
f
USE master GO sp_configure 'show advanced options', 1 GO sp_configure 'remote admin connections', 1 GO RECONFIGURE WITH OVERRIDE GO SELECT * FROM sys.configurations where name = 'remote admin connections'
f
f
现在sqlserver2012新建库是3.75MB大小
f
f
f
f
f
f
f
f
f
f
f
master数据库包含31个系统表,其中18个表在用户库中也有,另外13个表则用于跟踪服务器信息。其中的三个表(syslocks、syscurconfigs、sysprocesses)
并不在物理上存在于master数据库中,他们是随着用户的每一次查询他们而动态建立的。存在内存中
master数据库还包含10个称为“伪系统表”的表。这些表的名字以“spt-”开头。这些表用作各个系统存储过程的存储区,但他们不是真正的系统表。
你永远不要直接修改他们,因为这样做会打断某些系统存储过程,但删除他们不会破坏数据库的基本完整性。如果实际的系统表被修改了,
数据库的基本完整性就会被破坏
[dbo].[spt_fallback_db]
[dbo].[spt_fallback_dev]
[dbo].[spt_fallback_usg]
[dbo].[spt_monitor]
[dbo].[spt_values]
spt:system procedure table
f
sysdatabases表的含义
logptr:指向该数据库中事务日志第一个页的指针
f
f
系统表sysusers,限制哪些用户可以访问数据库,跟mysql一样
在sqlserver2008r2里封装为视图
对gz的帐号进行权限判断
SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO -- Note: gid (max group id) not maintained, shiloh logic not correct anyway -- CREATE VIEW sys.sysusers AS SELECT uid = convert(smallint, u.id), status = convert(smallint, case u.type when 'U' then 12 when 'G' then 4 when 'A' then 32 when 'L' then 16 + (u.status & 1)*12 else 0 end), u.name, u.sid, roles = convert(varbinary(2048), null), createdate = u.created, updatedate = u.modified, altuid = convert(smallint, r.indepid), password = convert(varbinary(256), null), gid = convert(smallint, case u.type when 'R' then u.id else 0 end), environ = convert(varchar(255), null), hasdbaccess = convert(int, case when p.state in ('G','W') then 1 else 0 end), islogin = convert(int, case u.type when 'A' then 0 when 'R' then 0 else 1 end), isntname = convert(int, case u.type when 'U' then 1 when 'G' then 1 when 'L' then (u.status & 1) else 0 end), -- USR_SID_EXTERNAL isntgroup = convert(int, case u.type when 'G' then 1 else 0 end), isntuser = convert(int, case u.type when 'U' then 1 when 'L' then (u.status & 1) else 0 end), -- USR_SID_EXTERNAL issqluser = convert(int, case u.type when 'S' then 1 else 0 end), isaliased = convert(int, case u.type when 'L' then 1 else 0 end), issqlrole = convert(int, case u.type when 'R' then 1 else 0 end), isapprole = convert(int, case u.type when 'A' then 1 else 0 end) FROM sys.sysowners u LEFT JOIN sys.sysprivs p ON p.class = 0 AND p.id = 0 AND p.subid = 0 AND p.grantee = u.id AND p.grantor = 1 AND p.type = 'CO' LEFT JOIN sys.syssingleobjrefs r ON r.depid = u.id AND r.depsubid = 0 AND r.class = case u.type when 'R' then 51 when 'L' then 72 end -- SRC_ROLEOWNER, SRC_ALIASUSER WHERE has_access('US', u.id) = 1 GO
CREATE TABLE [sys].[sysowners] ( [id] [int] NOT NULL, [name] [sys].[sysname] NOT NULL, [type] [char] (1) COLLATE Latin1_General_CI_AS_KS_WS NOT NULL, [sid] [varbinary] (85) NULL, [password] [varbinary] (256) NULL, [dfltsch] [sys].[sysname] NULL, [status] [int] NOT NULL, [created] [datetime] NOT NULL, [modified] [datetime] NOT NULL ) ON [PRIMARY] GO
f
f
在邀月的方法三里:
http://www.cnblogs.com/downmoon/archive/2009/12/13/1623004.html
use DB_NAME sp_dboption DB_NAME, "trunc. log on chkpt.", true checkpoint sp_dboption DB_NAME, "autoshrink", true
trunc. log on chkpt.
f
exec sp_dboption
f
pub数据库,图书管理系统示例库
EXEC [sys].[sp_helpdb] -- = NULL -- sysname
worktable :group by ,order by,union,游标都用到tempdb
tempdb初始大小为2MB
错误号1105表明tempdb已满
sqlserver重启的时候,tempdb沿用上次的大小,而不是总是2mb
http://www.cnblogs.com/stswordman/p/3358496.html
Tempdb initial size和dbcc shrinkfile
f
f
f
f
对master数据库进行备份
f
f
f
f
f
f
f
f
f
f
f
f
SET ANSI_PADDING ON
f
f
数据类型和范围值
f
f
f
BLOB使用一个16字节的指针,外加存储实际长度所需数目的2K页面
文本和图形不能共享页面
在文本或图像列中输入的单个字节也要占用2KB页面
f
f
避免使用null,定义的时候应该是not null
2048字节-2016字节=32字节
现在的sqlserver页头96字节=32*3 多了3倍
f
f
f
f
内部存储细节
内部系统表
sysobjects(系统对象)
sysindexes(系统索引)
syscolumns(系统列)
sysreferences(系统引用,外键)
sysconstraints(系统约束)
sysobjects(系统对象):表名,对象id,该表的所有者名字
sysindexes(系统索引):指向该表的第一个数据页面和最后一个数据页面,表大小,区数extent,数据页面数量,当前表行数
syscolumns(系统列):表列名,数据类型,列长度,列id
f
first 页和root 页
http://technet.microsoft.com/zh-tw/library/ms190283(SQL.90).aspx
sys.sysindexes (Transact-SQL)
traverse:横越;旋转;来回移动
f
数据页,页眉,数据行细节
变长列
f
f
f
f
f
f
f
buffer缓冲区 ,page header 页头,data数据,offset table偏移表
f
f
f
f
f
sysindexes.minlen
f
minlen,maxlen
f
对于只有定长列的表,sysindexes.minlen和sysindexes.maxlen是相等的
f
f
f
对于含变长列的表,minlen和maxlen的值是不相等的
minlen的值等于该表所有定长列之和加2字节
maxlen等于定长列和变长列(syscolumns.length)之和再加上一定数量的字节
f
--SQL2005 DBCC PAGE 13 PAGE HEADER: 14 15 16 Page @0x1A096000 17 18 m_pageId = (1:14517) m_headerVersion = 1 m_type = 1 19 m_typeFlagBits = 0x4 m_level = 0 m_flagBits = 0x200 20 m_objId (AllocUnitId.idObj) = 317 m_indexId (AllocUnitId.idInd) = 256 21 Metadata: AllocUnitId = 72057594058702848 22 Metadata: PartitionId = 72057594049462272 Metadata: IndexId = 1 23 Metadata: ObjectId = 1022626686 m_prevPage = (1:14514) m_nextPage = (1:14518) 24 pminlen = 16 m_slotCnt = 102 m_freeCnt = 38 25 m_freeData = 7950 m_reservedCnt = 0 m_lsn = (2568:5252:8) 26 m_xactReserved = 0 m_xdesId = (0:0) m_ghostRecCnt = 0 27 m_tornBits = -1007571449 28 29 Allocation Status 30 31 GAM (1:2) = ALLOCATED SGAM (1:3) = NOT ALLOCATED 32 PFS (1:8088) = 0x60 MIXED_EXT ALLOCATED 0_PCT_FULL DIFF (1:6) = NOT CHANGED 33 ML (1:7) = NOT MIN_LOGGED Page @0x1A096000 436822016 @0x0A64DEC1 174382785 Slot 101 Offset 0x1ec1 Length 77 3672 3673 Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS 3674 3675 Memory Dump @0x0A64DEC1 3676 3677 00000000: 30001000 cf000000 db2e7c01 fea10000 †0.........|..... 3678 00000010: 0600c004 0021003b 0047004d 00ce0000 †.....!.;.G.M.... 3679 00000020: 002d4efd 56604f7d 59096750 966c51f8 †.-N.V`O}Y.gP.lQ. 3680 00000030: 53580058 0006526c 51f85300 952e55e8 †SX.X..RlQ.S...U. 3681 00000040: 90320030 00370000 952e55c4 7e††††††††.2.0.7....U.~ 3682 3683 Slot 101 Column 0 Offset 0x1d Length 4 3684 3685 UNIQUIFIER = 206 3686 3687 Slot 101 Column 1 Offset 0x21 Length 26 3688 3689 Company = 中国你好有限公司XX分公司
f
f
f
f
f
f
sysindexes.root,sysindexes.first
f
f
f
distribution page分布页 统计信息,分布页是一个单独的页,用作一个直方图(是索引中键值的抽样图)
f
DBCC DBREINDEX
PAD_INDEX
f
IGNORE_DUP_KEY 忽略重复键
f
用户定义数据类型UDDT
f
f
f
f
f
规范化阶段和优化阶段,优化阶段才检查UDDT
f
f
f
f
bcp命令使用-E参数保留标识值
f
f
sql2012重启之后会出现自增列值跳跃增长
http://social.technet.microsoft.com/Forums/zh-CN/65ff4cb5-0a33-4d6b-b332-2ac9a728dcac/sql?forum=sqlserverzhchs
f
f
对添加数据,FILLFACTOR 填充因子不起作用
http://www.cnblogs.com/CareySon/archive/2012/01/06/2313897.html
不要在real类型和float类型上建立唯一索引或者primary key
f
alter table drop constraint
f
f
f
f
f
f
references
f
利用alter table的时候也可以指定fillfactor 填充因子
f
f
f
两表互相引用发生自展问题bootstrap问题
延迟约束
f
先利用alter table tablename nocheck constraint暂时停用约束,然后导入数据之后再开alter table tablename check constraint
这样sqlserver不检查在禁用约束时所添加的数据
添加约束的时候不检查约束,这样就可以越过重复值
--数据中心有重复值我估计是因为使用禁用约束的方式来建立约束 --建立约束的时候先指定nocheck,不检查当前表的重复或null值 ALTER TABLE [testidentity] WITH NOCHECK ADD CONSTRAINT [CK_NOTNULL] CHECK (name IS NOT NULL) --建立约束的时候默认是检查当前表的重复或null值 ALTER TABLE [testidentity] WITH CHECK ADD CONSTRAINT [CK_NOTNULL] CHECK (name IS NOT NULL) --建立完约束之后再开启约束,这样即使表里有重复值或者null值依然也可以建立约束,但是这个约束对建立约束之前的数据无效 ALTER TABLE [testidentity] CHECK CONSTRAINT [CK_NOTNULL] --禁用约束 ALTER TABLE [testidentity] NOCHECK CONSTRAINT [CK_NOTNULL] --开启了约束的话就会报错 消息 547,级别 16,状态 0,第 1 行 INSERT 语句与 CHECK 约束"CK_NOTNULL"冲突。该冲突发生于数据库"sss",表"dbo.testidentity", column 'name'。 语句已终止。
f
f
f
f
f
f
f
f
正则表达式
f
f
f
f
f
insert 表 default values
f
默认约束名字的由来
各种类型的列级约束都采用这种命名方法【[PK__customer__E84D41E808EE5046]】
NULL和NOT NULL不作为一种约束对象,所以在sysobjects系统表中不会记录
--PK:PRIMARY KEY
--UN:UNIQUE
--FK:FOREIGN KEY
--DF:DEFAULT
f
书中68E79C55是四个字节
sql2008r2中E84D41E808EE5046是八个字节
--E84D41E808EE5046就是该约束的对象ID。这一数值用作系统表sysobjects的id列
--也用作系统表sysconstraints的constid列
SELECT OBJECT_NAME(0xE84D41E808EE5046) --无结果
SELECT OBJECT_ID('[dbo].[customer]')--117835732
SELECT * FROM [sys].[sysconstraints] WHERE [constid]=0xE84D41E808EE5046 --无结果
SELECT * FROM [sys].[objects] WHERE [object_id]=0xE84D41E808EE5046 --无结果
f
f
SELECT [constr].* , [obj].[name] , [obj].[object_id] FROM [sys].[sysconstraints] AS constr INNER JOIN [sys].[objects] AS obj ON [constr].[id] = [obj].[object_id] WHERE [obj].[object_id]=OBJECT_ID('customer')
f
f
f
f
f
就算中间出错也会继续插入到数据库中
USE [sss] CREATE TABLE show_error ( col1 SMALLINT NOT NULL PRIMARY KEY , col2 SMALLINT NOT NULL ) BEGIN TRAN INSERT show_error VALUES ( 1, 1 ) INSERT show_error VALUES ( 1, 2 ) INSERT show_error VALUES ( 2, 3 ) COMMIT TRAN SELECT * FROM show_error
f
set xact_abort on
f
update 操作的原子性
f
临时表
f
f
f
f
f
f
f
WHERE STATE IN('CA',NULL)
f
f
f
f
f
IN,NOT IN ,ALL ,ANY
f
f
f
F
F
F
with check option
F
F
like 用法
f
f
USE [sss] CREATE TABLE testspace(id INT ,name VARCHAR(20)) INSERT INTO testspace SELECT 1, 'a' SELECT DATALENGTH(name) FROM testspace SELECT CAST([name] AS VARBINARY(10)) FROM testspace --十六进制 0x61 转换为十进制97 --当遇到乱码的时候可以先用cast函数转换为16进制VARBINARY,然后转换为其他形式,例如转换为int再用char函数显示出字符 SELECT char(CAST(CAST([name] AS VARBINARY(10)) AS INT)) FROM testspace
f
f
set ansi_padding的由来 ,尾部空格的争论
f
与0x20进行按位与运算,查看是否有尾部空格
f
f
f
f
使用sysindexes来获取表的总行数
f
f
NULLIF()函数
f
OLAP系统
f
CUBE关键字和ROLLUP关键字
f
compute by 和cube
f
f
f
f
f
f
f
union 查询的各个列的数据类型和列数必须要相同或者数据类型可以转换
f
union all
f
f
f
f
f
f
insert 表 values( default)
insert 表 default values
f
f
f
f
f
f
insert select方式插入表数据
f
f
insert exec
CREATE TABLE #config_out (NAME VARCHAR(50), minval INT , maxval INT, configval INT, runval INT) INSERT [#config_out] EXEC [sys].[sp_configure] SELECT * FROM [#config_out]
f
allow updates
backup buffer size
backup threads
hash buckets
logwrite sleep(ms)
f
f
smp concurrency
INSERT #config_out EXEC dogfood.MASTER.dbo.spconfigure
f
create table权限和select权限 select into
f
f
f
f
f
f
bcp命令的-E选项 保留标识值
check 约束和foreign key约束、触发器不起作用
LOAD TABLE有点类似于MYSQL的LOAD DATA INFILE语句
f
load table dump database 不正交
f
load table、 dump table
f
f
f
f
f
f
update 语句高级示例
f
f
truncate table
f
对于有复制和外键引用的表是truncate不了的
truncate之后可以收缩,因为页面已释放,更快更干净
f
BEGIN TRAN SELECT COUNT(*) FROM config_out TRUNCATE TABLE config_out SELECT COUNT(*) FROM config_out ROLLBACK TRAN SELECT COUNT(*) FROM config_out
f
f
f
with check option
f
f
f
ALTER TABLE [dbo].[aaa] NOCHECK CONSTRAINT ALL
ff
f
f
f
f
f
f
f
sqlserver内部细节行定位,空间管理
f
为什麽非聚集索引么有行溢出页面,因为非聚集索引的键列总大小不能超过900字节(mysql 1000字节)
sql2005引进了include关键字,非聚集索引也会有行溢出页面和lob页面
USE [sss] GO CREATE TABLE testrowoverflownonclu(id INT ,name NVARCHAR(4000),name2 NVARCHAR(2000)) CREATE NONCLUSTERED INDEX ncix_testrowoverflownonclu ON [testrowoverflownonclu]([id]) INCLUDE([name],[name2]) CREATE CLUSTERED INDEX cix_testrowoverflownonclu ON [testrowoverflownonclu]([id]) DROP INDEX ncix_testrowoverflownonclu ON [testrowoverflownonclu] INSERT INTO [testrowoverflownonclu] ( [id], [name], [name2] ) SELECT 4,REPLICATE('aa',2000),REPLICATE('aa',1000) SELECT * FROM [testrowoverflownonclu] TRUNCATE TABLE [DBCCResult] INSERT INTO DBCCResult EXEC ('DBCC IND(sss,testrowoverflownonclu,-1) ') SELECT * FROM [DBCCResult]
而聚集索引就是表本身,所以长度不能控制
f
并视图从他将与之连接的其他页的同一个分配单元(allocation unit )中分配该区extent
SELECT * FROM sys.[allocation_units]
262144 1 IN_ROW_DATA 262144 1 8 8 6
327680 1 IN_ROW_DATA 327680 1 2 2 1
458752 1 IN_ROW_DATA 458752 1 2 2 1
524288 1 IN_ROW_DATA 524288 1 2 2 1
851968 1 IN_ROW_DATA 851968 1 7 7 5
983040 1 IN_ROW_DATA 983040 1 2 2 1
281474978349056 1 IN_ROW_DATA 281474978349056 1 0 0 0
281474978414592 1 IN_ROW_DATA 281474978414592 1 2 2 1
281474978480128 1 IN_ROW_DATA 281474978480128 1 2 2 1
281474978611200 1 IN_ROW_DATA 281474978611200 1 2 2 1
281474978938880 1 IN_ROW_DATA 281474978938880 1 2 2 1
281474979397632 1 IN_ROW_DATA 281474979397632 1 17 10 8
281474979594240 1 IN_ROW_DATA 281474979594240 1 2 2 1
281474979987456 1 IN_ROW_DATA 281474979987456 1 2 2 1
281474980052992 1 IN_ROW_DATA 281474980052992 1 0 0 0
281474980249600 1 IN_ROW_DATA 281474980249600 1 4 4 2
281474980315136 1 IN_ROW_DATA 281474980315136 1 5 5 3
281474980642816 1 IN_ROW_DATA 281474980642816 1 33 29 27
281474980904960 1 IN_ROW_DATA 281474980904960 1 2 2 1
281474980970496 1 IN_ROW_DATA 281474980970496 1 0 0 0
281474981560320 1 IN_ROW_DATA 281474981560320 1 2 2 1
281474981625856 1 IN_ROW_DATA 281474981625856 1 2 2 1
281474981691392 1 IN_ROW_DATA 281474981691392 1 2 2 1
562949956763648 1 IN_ROW_DATA 562949956763648 1 0 0 0
562949958270976 1 IN_ROW_DATA 562949958270976 1 2 2 1
562949958336512 1 IN_ROW_DATA 562949958336512 1 2 2 1
844424931901440 1 IN_ROW_DATA 844424931901440 1 2 2 1
1125899909070848 1 IN_ROW_DATA 1125899909070848 1 2 2 1
71776119065149440 2 LOB_DATA 281474980642816 1 3 3 0
72057594037993472 1 IN_ROW_DATA 281474980511744 1 2 2 1
72057594038059008 1 IN_ROW_DATA 562949957222400 1 2 2 1
72057594038190080 1 IN_ROW_DATA 281474983067648 1 0 0 0
72057594038255616 1 IN_ROW_DATA 562949959778304 1 0 0 0
72057594038386688 1 IN_ROW_DATA 281474981822464 1 2 2 1
72057594038452224 1 IN_ROW_DATA 562949958533120 1 2 2 1
72057594038583296 1 IN_ROW_DATA 281474982608896 1 2 2 1
72057594038648832 1 IN_ROW_DATA 562949959319552 1 2 2 1
72057594038779904 1 IN_ROW_DATA 281474982674432 1 2 2 1
72057594038845440 1 IN_ROW_DATA 562949959385088 1 2 2 1
72057594038976512 1 IN_ROW_DATA 281474982739968 1 2 2 1
72057594039107584 1 IN_ROW_DATA 281474982805504 1 2 2 1
72057594039173120 1 IN_ROW_DATA 562949959516160 1 2 2 1
72057594039304192 1 IN_ROW_DATA 281474981101568 1 0 0 0
72057594039435264 1 IN_ROW_DATA 844424934522880 1 0 0 0
72057594039566336 1 IN_ROW_DATA 281474981363712 1 0 0 0
72057594039697408 1 IN_ROW_DATA 281474981232640 1 2 2 1
72057594039762944 1 IN_ROW_DATA 562949957943296 1 2 2 1
72057594039959552 2 LOB_DATA 281474981167104 1 0 0 0
72057594040025088 1 IN_ROW_DATA 281474981167104 1 0 0 0
72057594040156160 1 IN_ROW_DATA 281474981429248 1 0 0 0
72057594040287232 1 IN_ROW_DATA 281474981494784 1 0 0 0
72057594040418304 2 LOB_DATA 281474982871040 1 0 0 0
72057594040483840 1 IN_ROW_DATA 281474982871040 1 0 0 0
72057594040614912 2 LOB_DATA 281474979725312 1 0 0 0
72057594040680448 1 IN_ROW_DATA 281474979725312 1 0 0 0
72057594040811520 1 IN_ROW_DATA 844424933146624 1 0 0 0
72057594040877056 1 IN_ROW_DATA 1125899909857280 1 0 0 0
72057594041008128 2 LOB_DATA 281474982936576 1 0 0 0
72057594041073664 1 IN_ROW_DATA 281474982936576 1 0 0 0
72057594041204736 1 IN_ROW_DATA 844424936357888 1 0 0 0
72057594041335808 1 IN_ROW_DATA 281474983002112 1 0 0 0
72057594041466880 1 IN_ROW_DATA 844424936423424 1 0 0 0
72057594041532416 1 IN_ROW_DATA 72057594037927936 1 0 0 0
72057594041597952 3 ROW_OVERFLOW_DATA 72057594037927936 1 0 0 0
72057594041663488 2 LOB_DATA 72057594037927936 1 0 0 0
72057594041729024 1 IN_ROW_DATA 72057594037993472 1 0 0 0
72057594041794560 1 IN_ROW_DATA 72057594038059008 1 0 0 0
72057594041860096 3 ROW_OVERFLOW_DATA 72057594038059008 1 0 0 0
72057594041925632 2 LOB_DATA 72057594038059008 1 0 0 0
72057594041991168 1 IN_ROW_DATA 72057594038124544 1 0 0 0
72057594042056704 1 IN_ROW_DATA 72057594038190080 1 0 0 0
72057594042122240 3 ROW_OVERFLOW_DATA 72057594038190080 1 0 0 0
72057594042187776 2 LOB_DATA 72057594038190080 1 0 0 0
72057594042253312 1 IN_ROW_DATA 72057594038255616 1 0 0 0
72057594042318848 1 IN_ROW_DATA 562949955190784 1 2 2 1
72057594042384384 1 IN_ROW_DATA 562949955649536 1 2 2 1
72057594042449920 1 IN_ROW_DATA 844424932360192 1 2 2 1
72057594042515456 1 IN_ROW_DATA 562949956108288 1 5 5 3
72057594042580992 1 IN_ROW_DATA 562949956304896 1 2 2 1
72057594042646528 1 IN_ROW_DATA 562949956435968 1 0 0 0
72057594042712064 1 IN_ROW_DATA 281474979921920 1 0 0 0
72057594042777600 1 IN_ROW_DATA 562949956698112 1 2 2 1
72057594042843136 1 IN_ROW_DATA 844424933408768 1 2 2 1
72057594042908672 1 IN_ROW_DATA 562949956960256 1 2 2 1
72057594042974208 1 IN_ROW_DATA 562949957615616 1 2 2 1
72057594043039744 1 IN_ROW_DATA 562949957812224 1 0 0 0
72057594043105280 1 IN_ROW_DATA 844424934653952 1 2 2 1
72057594043170816 1 IN_ROW_DATA 562949959647232 1 0 0 0
72057594043236352 1 IN_ROW_DATA 562949959712768 1 0 0 0
72057594043432960 1 IN_ROW_DATA 72057594038452224 1 2 2 1
72057594043564032 1 IN_ROW_DATA 72057594038583296 1 2 2 1
72057594043629568 1 IN_ROW_DATA 72057594038648832 1 2 2 1
72057594043760640 1 IN_ROW_DATA 72057594038779904 1 2 2 1
72057594043826176 1 IN_ROW_DATA 72057594038845440 1 2 2 1
72057594043891712 1 IN_ROW_DATA 72057594038910976 1 2 2 1
72057594044219392 1 IN_ROW_DATA 72057594039238656 1 2 2 1
72057594044284928 1 IN_ROW_DATA 72057594039304192 1 2 2 1
72057594044350464 1 IN_ROW_DATA 72057594039369728 2 2 2 1
72057594044416000 1 IN_ROW_DATA 72057594039435264 1 2 2 1
f
f
延迟更新
before image ,after image
触发器显示不了执行计划
-- --create trigger tgr_config_out_insert --on config_out -- for insert --插入触发 --as -- --定义变量 -- declare @name varchar(100) -- --在inserted表中查询已经插入记录信息 -- select @name = name from inserted; -- PRINT @name --go --插入数据 insert into config_out([name]) values('5班');
f
行更新的奥秘,新映像和旧映像
f
延迟更新的日志记录ldf
f
f
直接更新,日志记录要考虑直接更新和延迟更新的情况
f
直接更新包括:原位更新(update-in-place)、直接字段更新(direct-field-update)、页上删除/插入更新(on-page delete/insert)、完全删除/插入更新(full delete/insert)
f
f
f
如果某列被设置为等于其原来的值,则不产生modify记录
f
f
所有延迟更新都是完全删除/插入操作,这类操作要执行前面描述的两组日志进程
先写DNOOP/INOOP
如果一个直接更新也是一个完全删除/插入操作,则他不需要额外的NOOP日志步骤
延迟更新总是一种删除/插入操作
f
f
f
在命令行输入
net start MSSQLSERVER /T323
使用跟踪标志323还是没有办法输出更新的类型
f
--SQL6.5中的syslogs表
--opcode 事务日志中的操作代码
0 beginxact --start transaction
1 not used
2 not used
3 not used
4 insert --insert row
5 delete --delete row
6 insind --deferred update step2 insert record 延迟更新
7 iinsert --nc index insert 非聚集索引插入
8 idelete --nc index delete
9 modify -- modify row
10 noop --noop
11 inoop --deferred update step 1 insert record 延迟更新步骤1
12 dnoop --deferred update step 1 delete record
13 alloc --allocation
14 dbnextid -- extent allocation 区分配
15 extent -- extent allocation 区分配
16 split --page split 页拆分
17 checkpoint --checkpoint
18 savexact --savepoint 现在为save tran
19 cmd
20 dextent --deallocate extent 释放区
21 dealloc --deallocate page 释放页面
22 dropexts --delete all extents on alloc page 删除已经分配了页面的那些区
23 aextent --alloc extent-mark all pages used 标记在哪些区里分配了页面
24 salloc --alloc new pages for split (split allocate) 页拆分分配页面
25 not used
26 not used
27 sort --sort allocations
28 sodealloc --related to sort allocations
29 altdb --alter database record
30 endxact --end transaction
31 sortts --related to sort allocations
32 text --log record of direct text insert
33 inooptext --log record for deferred text insert
34 dnooptext --log record for deferred text delete
35 insindtext --indirect insert log record
36 textdelete --delete text log record
37 sortedsplit --used for sorted splits
38 chgindstat --incremental sysindexes stat changes
39 chgindpg --direct change to sysindexes
40 txtptr --info log row when retrieving textptr
41 textinfo --info log for writetext/updatetext
42 resetident --used when a trucate table resets an identity value
43 undo --compensating log record for insert only row locking(IORL)补偿日志记录
44 insert_IORL --insert with row locking record
45 insind_IORL --insind with IORL
46 insert IORL --iindex with IORL
47 split IORL --page split with IORL
48 salloc IORL --alloc new page for split with IORL
49 alloc IORL -- allocation with IORL
50 prealloclog --preallocate log space for CLRs
unknow
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
前面已经提到,进行原位更新时,对值有变化的每一行、每一列都有一个MODIFY记录
f
f
f
f
f
f
f
这种写法不会进行循环的
f
f
页拆分会记录
f
f
f
f
瘦客户端和胖客户端
f
f
SAP R3系统,使用存储过程
f
f
sql05可以了
DECLARE @@a INT SET @@a=1 SELECT @@a
f
f
syslogs表 译码表
f
f
f
case语句的变形:coalesce,nullif,isnull
f
在64K的包大小中,注释也包括在内,所以在TSQL代码中不应该包含太多注释
f
f
f
位运算符
位屏蔽
f
f
f
f
f
标量的定义:是单值的另一种叫法,你也可以把单个行中的单个列中的值看作一个标量。
f
SQL92 规范
f
目前SQLSERVER没有分离的日期和时间数据类型
f
数据类型转换表
f
ASCII()和CHAR()函数
f
f
在6.0之前,对于一个确切模式匹配的查询来说,上面的CHARINDEX()比like快得都,现在情况不是这样了,他们二者的性能相同
f
f
SELECT SOUNDEX() SELECT DIFFERENCE()
f
f
f
f
f
index_col:被进行索引的列的名字
f
f
计算某个表的平均列长度,不是列所占用空间
f
无参函数
current_timestamp
f
f
f
f
f
SET XACT_ABORT ON的用词不当
f
使用@@error的原因
f
f
DB2的read committed隔离级别叫CURSOR STABLITY
f
增加重试逻辑
f
f
f
f
f
嵌套事务
f
save tran 保存点
保存点不确认数据库的任何变化,只有committ语句能够确认
f
sqlserver接收到一个 sql batch的时候要处理的步骤
命令分析器分析sql生成查询树
对查询树生成执行计划
每次数据修改后,触发器的执行计划不需要重新编译(存储过程执行计划)
f
存储过程存储些什么
查询树和tsql语句被缓存了
如果plan cache不够了,就报:没有足够内存来运行该过程
f
f
你预期有10个不同的连接同时执行一个存储过程,那么内存中就应该有该仔细计划的10个拷贝(只要你有足够的plan cache空间即可)
f
sp_recompile
f
with recompile
f
f
存储过程的字符数限制
f
加密了的存储过程syscomment输出都为null
f
f
f
f
f
临时存储过程
CREATE PROC #aa AS SELECT 1
f
f
f
f
f
f
f
4022 | Skips launching automatic stored procedures when SQL Server starts. This is equivalent to setting “scan for startup procs” configuration option to 0. | Article | Y | Y |
http://www.cnblogs.com/lyhabc/articles/3816529.html
跟踪标志4022关闭自启动存储过程
f
sqlserver系统存储过程
f
f
类目存储过程
f
f
sql agent存储过程,要在msdb里执行
f
复制相关存储过程
f
f
扩展存储过程
f
扩展存储过程不是由sqlserver派生的独立存储过程,他们直接运行在sqlserver的地址空间中,这些DLL利用open data services API建立(sqlserver也使用open data services API)
f
用C语言编写扩展存储过程
f
f
f
f
f
master数据库里的扩展存储过程,不是所有扩展存储过程都是xp开头的,也有sp开头的,例如
EXEC [sys].[xp_sprintf] EXEC sys.[xp_sscanf]
f
EXEC [sys].[xp_sprintf] EXEC sys.[xp_sscanf]
f
通用扩展存储过程 xp_cmdshell
sql邮件有关扩展存储过程,管理和监测有关的扩展存储过程,集成安全性有关的扩展存储过程
f
f
select into和bcp不触发触发器,因为不记录日志
f
利用日志在内存中构造inserted表和deleted表
f
f
级联触发器,最大嵌套16层
f
f
f
f
sp_sdidebug的代码是sqlserver内部,不是一个dll
pss结构 process status structure
f
f
f
动态sql
f
f
16个字节存放文本指针
f
readtext和updatetext都允许每次操作text列中的一个文本块,而writetext语句不允许处理文本块只允许处理整列
f
f
f
对于text列,writetext也可以,insert into 也可以
--SELECT TEXTVALID() ALTER TABLE [aa] ADD txt TEXT INSERT INTO [aa] ( [NAME], [ni], [txt] ) VALUES ( '1', -- NAME - char(400) 1, -- ni - int 'nihao' -- txt - text ) DECLARE @mytextptr VARBINARY(16) SELECT @mytextptr=TEXTPTR(txt) FROM [aa] WHERE ni=1 --SELECT TEXTVALID(TEXTPTR(txt)) FROM [aa] WHERE ni=1 --消息 174,级别 15,状态 1,第 1 行 --textvalid 函数要求有 2 个参数。 PRINT @mytextptr --0xFEFF112700000000FD00000001000000 --writetext根据16字节的指针直接修改text列的值 将nihao修改为abc WRITETEXT aa.[txt] @mytextptr WITH LOG 'abc' SELECT txt FROM [aa] WHERE ni=1
f
f
f
f
f
f
SELECT @@TEXTSIZE 2147483647byte=2GB
f
f
6.0的时候引入updatetext
f
f
f
f
f
DECLARE @mytextptr VARBINARY(16) SELECT @mytextptr=TEXTPTR(txt) FROM [aa] WHERE ni=1 IF @mytextptr IS NOT NULL BEGIN UPDATETEXT [aa].[txt] @mytextptr NULL NULL WITH LOG 'mary' END --追加 SELECT txt FROM [aa] WHERE ni=1
f
DECLARE @mytextptr VARBINARY(16),@pat_offset int,@oldstring varchar(200),@newstring varchar(200), @sizeold INT SELECT @oldstring='mary',@newstring='tom' SELECT @sizeold=DATALENGTH(@oldstring),@pat_offset=PATINDEX('%'+@oldstring+'%',txt)-1, @mytextptr=TEXTPTR(txt) FROM aa WHERE ni=1 PRINT @pat_offset --3 偏移 PRINT @sizeold --4 长度 UPDATETEXT [aa].[txt] @mytextptr @pat_offset @sizeold WITH LOG @newstring --查找和替换 SELECT txt FROM [aa] WHERE ni=1
f
f
f
f
f
f
f
f
f
f
f
f
游标
f
f
f
f
f
f
sqlserver专门为集合操作设计,不应用游标
f
f
f
f
f
f
f
《inside ODBC》一书
f
ODBC之父:kyle geiger
EXEC [sys].[sp_cursor]
f
f
sqlserver本质上以集合为基础的
f
f
游标结合动态sql
f
f
f
f
他们为sqlserver开发了ODBC驱动程序
f
f
游标使用到tempdb
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
EXEC SYS.SP_MAKEWEBTASK
消息 2812,级别 16,状态 62,第 1 行
找不到存储过程 'SYS.SP_MAKEWEBTASK'。
f
F
F
select 统计
F
sqlserver发邮件
F
F
EXEC [master]..[xp_sendmail] EXEC [master]..[xp_readmail]
F
F
F
F
EXEC [sys].[sp_sqlexec] @p1 = '' -- text
[sys].[sp_sqlexec]是open data services的一个专用的内部函数
SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO create procedure sys.sp_sqlexec @p1 text as declare @execstr nvarchar(max) set @execstr = CONVERT(nvarchar(max),@p1) exec(@execstr) GO
F
分布式查询
没有openquery方便
DROP TABLE #tmptb CREATE TABLE #tmptb ( [SERVERNAME] NVARCHAR(MAX) , ) --执行之前要开启MSDTC INSERT INTO #tmptb ( [SERVERNAME] ) EXEC [1XX.XX.XX.XX,XXX].[XXXXX.Archixx].[sys].[sp_sqlexec] @p1 = 'SELECT @@SERVERNAME ' --链接服务器"[1XX.XX.XX.XX,XXX]"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "该伙伴事务管理器已经禁止了它对远程/网络事务的支持。"。 --消息 7391,级别 16,状态 2,第 1 行 --无法执行该操作,因为链接服务器 "[1XX.XX.XX.XX,XXX]" 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事务。
f
f
f
sql6.5不支持用户自定义函数
使用VB5和VC5创建OLE 自动化存储过程
f
F
EXEC [sys].[sp_OACreate] EXEC [sys].[sp_OAMethod] EXEC [sys].[sp_OAGetErrorInfo] EXEC [sys].[sp_OADestroy]
为解决没有用户自定义函数的问题退出OLE 自动化[sp_OACreate]
F
F
锁
F
F
f
自旋锁避免死锁
f
锁内存结构大约28字节
锁请求者的进程id
数据库id
对象id
行号
锁类型
被锁资源也要一个大约32字节的资源锁
f
f
EXEC [sys].[sp_lock] @spid1 = 0, -- int @spid2 = 0 -- int
区锁 ext
f
f
f
约束连接
EXEC [sys].[sp_getbindtoken] --消息 201,级别 16,状态 9,过程 sp_getbindtoken,第 1 行 --过程或函数 'sp_getbindtoken' 需要参数 '@out_token',但未提供该参数。 EXEC [sys].[sp_bindsession]
共享锁不阻塞的原因使用约束连接共享锁空间
f
f
f
数据插入中的hotpage
插入行加锁(Insert row-level locking ---IRL)
3种情况
1、堆表,最后一页成为hotpage
2、聚集索引表,主键在自增列,最后一页成为hotpage
3、在自增列上建立非聚集索引,最后一页成为hotpage
f
f
f
f
插入页锁记录正被使用的行号或行槽 slot,使得两个具有IX_PAGE的进程不在同一个行槽(用来放置该行)上操作
第一个探测到当前页是满的那个进程将得到一个LN_PAGE链接页锁
f
f
sql2012
64位操作系统:每个锁块需要96个字节。每个锁拥有者块需要56个字节 0.5MB
f
f
f
f
f
f
f
f
f
tps ,每秒事务处理数评估
f
sqlserver提供了一个优化器提示:fastfirstrow
用这个参数告诉sqlserver,对于你的应用程序来说,快速返回第一行比节省返回全部行的总时间重要
这个总时间即一般情况下查询计划所花费的时间
f
http://www.microsoft.com/en-us/server-cloud/products/sql-server/
f
f
f
谨慎使用游标
f
尽量使用存储过程
f
moden 调制解调器 28kb/s
f
SET NOCOUNT ON
禁用DONE IN PROC
f
network monitor
f
f
sqlserver内部应该有一个内部时钟,这个时钟跟操作系统时间无关,主要用于生成时间戳,跟单片机
f
页拆分引起的死锁
调整填充因子 fillfactor
f
f
f
f
系统中的锁将报告到伪系统表syslocks和master库中
f
f
f
DBCC INPUTBUFFER(spid)
f
f
f
f
f
f
f
f
SELECT [name], pagetype= CASE WHEN [indid]=0 THEN 'data' WHEN [indid]=1 THEN 'clust index' WHEN [indid] BETWEEN 2 AND 254 THEN 'nonclust index' WHEN [indid]=255 THEN 'text/image' ELSE 'not found in sysindexes' END FROM [sys].[sysindexes] WHERE id= AND [indid]=
f
f
1206、1204、1208、1200、1205
f
f
SARG
f
索引统计信息
sqlserver确定一个分布页中能放下多少元素,然后对整个表按等距抽样,以获得指定个数的元素,每个这样的元素称为步 step 步长
分布页也包含了关于他所遇到数据的唯一性的统计信息,数据的唯一性,这种唯一性又成为密度,他提供了关于该索引选择能力的一种指标
f
引导列即前导列 mysql ,sqlserver
f
f
SELECT distribution FROM [sys].[sysindexes] 消息 207,级别 16,状态 1,第 1 行 列名 'distribution' 无效。 DBCC SHOW_STATISTICS([aa],[PK_aa])
f
统计信息步长的计算
查询优化的正确叫法应该叫概率优化
f
f
分布页也是2KB大小,页头也是32字节
f
优化器估算最低的逻辑I/O
f
缓冲区管理器-》高速缓存
优化器根据分布页中的密度和步数值评估索引,估计命中率
F
F
f
无统计信息的情况
f
f
改写格式策略,解决大表join问题,使用到tempdb的工作表
f
join多个表使用修剪技术将决策树维持在一个便于管理的规模上
f
物理读命中率
f
f
跟踪标志:302、310
查看优化器工作原理
f
f
f
f
f
f
f
f
f
RECONFIGURE WITH OVERRIDE
f
缺页中断
虚拟内存
f
page faults/sec(缺页/秒)
默认情况下,Windows NT给每一个线程的栈分配1MB内存,如果内存紧张,并且必须使用大量的worker
你可以直接在sqlserver上使用EDITBIN.EXE工具软件(由Windows NT提供)把栈大小减少到大约64KB
栈大小最低可以减少到16KB,不过如果这个值设置得太低,worker线程就会因为栈溢出异常而被强行终止
力伟
每一个worker在创建的时候,自己需要申请多少mb内存空间
32 bit机器 是0.5mb
x64 bit机器是 2mb
ia64 机器是4mb
http://space.cnblogs.com/message/869115/
SQL会为进程内的每个线程分配0.5MB的内存,以存放线程的数据结构和相关信息
我个人觉得0.5MB会不会太小了,如果线程所需要的内存超过0.5MB怎麽办?
0.5是指分配给thread自身的,如果上面运行语句,那是单独的,不算在这0.5里
f
f
f
DBCC memusage DBCC PROCCACHE
f
f
DBCC TRACEON(3604,-1) DBCC TRACEON(3635,-1) DBCC PROCCACHE
f
sqlserver为每个用户连接保存27KB内存
f
f
open databases:每个已配置的数据库需要的内存大概1MB
f
open objects 默认值500个
f
历史遗留问题,默认一张表达到200个页锁后,sqlserver即把页锁升级到表锁
f
f
最大排序页 ,默认每个连接有128KB内存进行排序,64个内存页=128KB
MYSQL的
sort_buffer_size:系统中对数据进行排序的时候使用的 Buffer;
Sort Buffer 同样是针对单个 Thread 的,所以当多个 Thread 同时进行排序的时候,系统中就会出现
多个 Sort Buffer。一般我们可以通过增大 Sort Buffer 的大小来提高 ORDER BY 或者是 GROUP BY
的处理性能。系统默认大小为 2MB,最大限制和 Join Buffer 一样
f
f
在sqlserver6.5里,worker的处理方式从队列改为使用IO-COMPLETION端口
sqlserver把页散列以便快速访问高速缓存中的页面 hash bucket配置用于设置存储桶数目
f
.
DBCC bfcount 消息 2526,级别 16,状态 3,第 1 行 DBCC 语句错误。请查阅文档以了解正确的 DBCC 语法和选项。
f
f
sqlserver条用win32 api setProcessworkingsetsize()
预写日志要求同步I/O,以保证可恢复性,所以异步I/O从不用来进行写日志操作
f
f
提升sqlserver的优先级(priority boost 优先级提升)
使sqlserver在较高Windows NT调度优先级上运行
该选项默认值为0,sqlserver在SMP机器上,他以15以上的优先级运行。Windows NT优先级值范围从1(空闲)-到31(realtime time critical)
默认情况下,Windows NT会临时提升使用 IO -COMPLETION端口的线程(sqlserver的worker)的优先级
优先反转问题
设置该选项不能使sqlserver以最高的Windows NT优先级 31 来运行
realtime time critical
network packet size网络包大小
f
tpcc测试程序,基于sqlserver4.2版本
SMP并发
f
logLRU buffers缓冲区,日志也是以页的形式存在在内存中,事务日志缓冲区,在6.5版本以前,默认情况下,所有日志页都经过常规的数据页
所用的同一缓冲区管理器。
从6.5版本开始,利用logLRU设置可为日志保留一小部分高速缓存,用这种办法可防止日志页污染普通数据页,意思是说把数据页也刷写到磁盘
就像mysql的备份 http://www.orczhou.com/index.php/2010/05/innodb-plugin-make-buffer-cache-scan-resistant/
InnoDB Plugin特性介绍:让Buffer Pool不被污染
1. Buffer Pool中LRU缺点、细节
这样LRU算法的一个缺点是,如果有某一个查询做了一次全表扫描(例如备份,临时DDL等),都可能会导致整个Buffer Pool中LRU链表中的数据块都被替换了,
甚至很多热点数据也会被替换,而这些新进的数据块可能在这一次查询之后就再也不会被读到了。我们也称这种情况为“Buffer Pool被污染”
f
In-Flight日志
http://www.cnblogs.com/CareySon/p/3195276.html#2763836
物理日志I/O 顺序的
DBCC SQLPERF(LRUSTATS2) 消息 2526,级别 16,状态 12,第 1 行 DBCC 语句错误。请查阅文档以了解正确的 DBCC 语法和选项。
f
F
group committe 成组确认事务
waitforsingleobject()
F
F
f
SMP(Symmetric Multi-Processing),对称多处理结构的简称
对称多处理器
f
f
设置cpu处理器关联掩码,Linux上的客户要求的
f
自旋锁和时间片
f
USE [sss] EXEC sys.[sp_tableoption] @TableNamePattern = N'[aaa]', -- nvarchar(776) @OptionName = 'insert row lock', -- varchar(35) @OptionValue = 'true' -- varchar(12) 消息 15600,级别 15,状态 1,过程 sp_tableoption,第 50 行 为过程 'sys.sp_tableoption' 指定的参数或选项无效。
f
sqlserver启动参数
f
PSS进程状态结构process status structure
f
f
f
性能计数器
f
sqlserver公共变量
f
f
f
f
f