Sqlserver
书籍
SQL Server 2012 深入解析与性能优化
https://download.csdn.net/download/syjhct/10951554
基础知识
安装
MICROSOFT SQL SERVER 2012 企业服务器版/CAL版序列号: 748RB-X4T6B-MRM7V-RTVFF-CHC8H
参考说明
https://www.cnblogs.com/xiongnanbin/p/8206268.html
资源
SQL Server性能调优实战.pdf
https://download.csdn.net/download/pflory/10140470
P230页 关于索引的选择
若是高频率的查询需求(例如首页),通常会因为更新的频率过高,而导致存在一定的阻塞,或者产生死锁。
读写分离(通过数据库的发布订阅拷贝多一份数据来实现,虽然说数据拷贝多了一份,而且读库的索引也同样需要创建
但是数据插入时不会有太多的等待与死锁的出现,因为写库时不需要创建太多的索引,而且减少了资源的争夺)
常用 SQL 语句
-- 清空表 truncate table A -- 复制表内容:从表 ExamQuesAsk23 所有内容复制到 ExamQuesAsk insert into ExamQuesAsk select * from ExamQuesAsk23 -- 修改表中主键,采用非聚集索引 ALTER TABLE [dbo].[SysLog] ADD CONSTRAINT PK_SYSLOG PRIMARY KEY NONCLUSTERED([LogID])
查询数据库中表空间占用大小和记录数目
SELECT TableName = obj.name, TotalRows = prt.rows, [SpaceUsed(KB)] = SUM(alloc.used_pages)*8 FROM sys.objects obj JOIN sys.indexes idx on obj.object_id = idx.object_id JOIN sys.partitions prt on obj.object_id = prt.object_id JOIN sys.allocation_units alloc on alloc.container_id = prt.partition_id WHERE obj.type = 'U' AND idx.index_id IN (0, 1) GROUP BY obj.name, prt.rows ORDER BY TotalRows DESC
导入导出备份
SQL Server2012如何导出sql脚本并且还原数据库
https://www.cnblogs.com/seekdream/p/5723079.html
【注意】 导出在时候一定要选好 架构 和 数据,不然默认导出的仅仅是架构而已。
部分数据的同步操作
通过中间产生临时表,作为中转表的形式,传递数据
-- 用查询出来的数据 生成新表 ExamStudentTemp SELECT TOP 1000 * INTO [HN-SafeExamCore].[dbo].[ExamStudentTemp] FROM [HN-SafeExamCore].[dbo].[ExamStudent] WHERE state=0 ORDER BY [StartExamTime] desc
-- 更新时间 update [HN-SafeExamCore].[dbo].[ExamStudentTemp] set [StartExamTime]='2018-11-21 14:30:00.000', [EndExamTime]='2018-11-25 20:30:00.000'
-- 同步数据 UPDATE a SET a.StartExamTime=b.StartExamTime, a.EndExamTime=b.EndExamTime, a.SafetyCertificateID=b.SafetyCertificateID, a.[state]=0, a.[UsedTime]=0, a.[IsFinish]=NULL, a.[ExamComputerIP]=NULL, a.[IsPass]=NULL, a.[IsCreateCertificate]=NULL FROM [HN-SafeExamCore].[dbo].[ExamStudent] as a, [HN-SafeExamCore].[dbo].[ExamStudentTemp] as b WHERE a.ExamStudentID=b.ExamStudentID
SQL Profiler 监控使用说明
SQLServer 执行计划
在执行SQL语句时,点击工具栏的按钮。分为 预估 计划时间 和 实际执行时间 选项。
SQL Server Profiler工具
http://www.cnblogs.com/kissdodog/p/3398523.html
SQL Server Management Studio=》工具=》SQL Server Profiler。
常用跟踪
一般的跟踪都可以直接使用自带的跟踪模板解决
Standard:记录所有存储过程和T-SQL语句批处理运行的时间
SP_Counts:计算已运行的存储过程数,
TSQL:记录客户端提交给sqlserver的所有T-SQL语句的的内容和开始时间
TSQL_Duration:记录客户端提交给sqlserver的所有T-SQL语句批处理信息以及执行这些语句所需的时间(毫秒)
Tuning:记录有关存储和T-SQL语句批处理的信息以及执行这些语句所需的时间(毫秒)
自定义模板
可以对监控的选项进行过滤,比如数据库名称、时间参数等这些
文件 / 模板 / 编辑模板,可以编辑之前保存的模板
图形界面
duration 图形界面中的单位是 毫秒
CPU 图形界面中的单位是 毫秒,说明事件占用CPU的时间
数据库优化引擎顾问
可以在 SQL Manager 菜单 /工具 中找到
在 SQLProfiler 中采取 stardand,TSSQL_Duration, Tuning 等方式进行监测,得到的结果。
然后,用 引擎顾问,打开保存下的文件,选择数据库,开始分析。
大约 1分钟 可以拿到结果
建议
- 索引建议自己手动更改,比如改成“ix_book_name”,“索引标示_表名_字段描述”
资料
SQL Server 手把手教你使用profile进行性能监控,sqlprofile介绍
http://www.bkjia.com/Sql_Server/1188602.html#top
数据库引擎优化顾问优化数据库
https://www.cnblogs.com/zhouchaoyi/articles/2088026.html
索引
主要特点
聚集索引对于范围查询是最有效的
因为guid类型不会用到范围查询,只有=查询,所以没有必要使用聚集索引,但是对于自增列类型的,可以使用聚集索引,还有就是时间列,会经常用到> < =查询也是适合聚集索引。聚集索引非常珍贵,因为一张表只有一个聚集索引,所以不要将聚集索引浪费在一个guid列中,在sqlserver数据库中,主键默认的索引是聚集索引。
https://www.cnblogs.com/njcxwz/p/6400575.html
我们都知道,数据库中的每一个表要么是堆表,要么就是包含聚集索引的表,或者我们称之为有序表。如果表是一个堆表,那么在使用非聚集索引查询数据的时候,会使用书签查找去底层的数据表中去检索需要的数据,这个书签查找会通过每一个索引中包含的行标识(RID)去定位每一个底层数据表的数据行。如果表上面有聚集索引,那么在使用非聚集索引查找其他需要数据的时候,就会使用聚集索引键去定位底层的数据行。
SQL Server索引进阶第十一篇:索引碎片分析与解决
https://www.cnblogs.com/tjy9999/p/4495047.html
常用SQL语句
-- 查看表是否存在索引 EXEC sp_helpindex 'TestQuestion' --建立聚集索引 // DROP_EXISTING = {ON |OFF }:表示如果这个索引还在表上就 drop 掉然后在 create 一个新的。 默认为 OFF。 create clustered index PK_EXAMSTUDENT on ExamStudentResit(ExamStudentID) with (drop_existing=on) create clustered index PK_EXAMSTUDENT on ExamStudentResit(ExamStudentID) // unique 代表唯一 create unique clustered index idx_createdon on ExamQuesAsk(CreatedOn,SortID) with (drop_existing=on) --建立非聚集索引 create index idx_student_id on ExamQuesAsk(ExamStudentID) --建立非聚集索引,2个字段 create index idx_appdevice_id on AppDevice(DeviceId,AppId)
【SqlServer】SqlServer索引的创建、查看、删除
https://www.cnblogs.com/HDK2016/p/7831052.html
通过非聚集索引让select count(*) from 的查询速度提高几十倍、甚至千倍
https://blog.csdn.net/sqlserverdiscovery/article/details/12646371
sqlserver索引小结
https://www.cnblogs.com/lx823706/p/5531395.html
分区表
分区表 方便数据迁入迁出
索引和数据均是存储在不同文件中,可以减少I/O文件读取的耗时操作
加快查询、修改和创建
数据是分段的,如以年份为分隔的数据,对于当年的数据经常进行增删改查操作,而对于往年的数据几乎不做操作或只做查询操作,这种情况可以使用分区表。
参考资料
https://www.cnblogs.com/libingql/p/4087598.html
按时间拆分
TB级SQL Server数据库表分区的实现
https://blog.csdn.net/luoyanqing119/article/details/18596907
深入浅出SQL Server 2008 分区函数和分区表
https://www.cnblogs.com/zhijianliutang/archive/2012/10/28/2743722.html
修改分区函数时,相当于范围
常用SQL语句
-- 复制表数据 insert into ExamQuesAsk select * from ExamQuesAsk23 -- 获取分区函数中分隔参数 SELECT * FROM SYS.PARTITION_RANGE_VALUES ORDER BY VALUE DESC -- 查询出分区界限中的最大值 SELECT MAX(value) FROM SYS.PARTITION_RANGE_VALUES PRV --1. Style=101时,表示日期字符串为:mm/dd/yyyy格式 SELECT CONVERT(datetime,'11/1/2003',101) -- 查询所有分区占用情况 select $PARTITION.PartitionFunctionDateTime(CreatedOn) as 分区编号, count(1) as 记录数 from ExamQuesAsk group by $PARTITION.PartitionFunctionDateTime(CreatedOn)
分区函数
分区函数是数据库中的一个独立对象,它将表的行映射到一组分区,所以分区函数解决的是HOW的问题,即表如何分区的问题。创建分区函数时,必须指明数据分区的边界点以及分区依据列,这样便知道如何对表或索引进行分区。
每个boundary_value属于属于每个边界值间隔的哪一侧(左侧还是右侧)
-- PartitionFunctionDateTime 分区函数名称 CREATE PARTITION FUNCTION PartitionFunctionDateTime( datetime ) AS RANGE RIGHT FOR VALUES ('2013-01-01 00:00:00','2014-01-01 00:00:00')
创建分区文件组(SECTION2013, SECTION2014, SECTION2015)
创建分区文件(DB2013, DB2014, DB2015)
分区方案
CREATE PARTITION SCHEME [SchemeDateTime] AS PARTITION [PartitionFunctionDateTime] TO ([SECTION2013], [SECTION2014], [SECTION2015])
删除分区
https://www.cnblogs.com/wbzhao/p/4963393.html
直接在数据库界面上 执行 删除 操作
任务计划
SQL Server 代理 添加作业任务
https://jingyan.baidu.com/article/0bc808fc7ea4d71bd585b968.html
自动创建分区
sql server 任务计划 一年执行一次,每年的年底,我这么配正确吗?
https://zhidao.baidu.com/question/544683912.html
SQL Server 代理 / 定时任务 / 作业 /
计划: 选项 , 每月执行, 第1天 每12月 执行1次
步骤: 输入脚本
定时任务的测试: 右键 作业, 选择“作业开始步骤(T)...”, 检测是否执行成功
遇到的问题
唯一索引的分区依据列必须是索引键的子集。
【解决】包含所有字段来创建分区依据
聚集索引
聚集索引是按顺序存储的
当聚集表中,新增数据比较频繁时,建议使用数值类型(INT,BIGINT, 等类型)
《SQL Server性能调优实战》P198
C# 中 Guid.NewGuid().ToString() 有序吗?
是随机无序的GUID
https://www.cnblogs.com/zhouruifu/archive/2012/04/18/2454088.html
无序GUID做聚集索引
聚集索引添加到每张表中都会有【数据产生时间】列
https://www.cnblogs.com/brain313001120/p/3856495.html
统计信息的使用
查询某一列是否存在重复数据
SELECT 某一列 , COUNT(某一列) FROM 表名 GROUP BY 某一列 HAVING COUNT(某一列) > 1
重建索引
维护计划,SQLServer 自带的工具来管理其功能
https://bbs.csdn.net/topics/390659922
索引自动重建脚本
http://www.cnblogs.com/Frank-Zhao/archive/2012/09/14/2685393.html
索引碎片及填充因子结束
https://www.cnblogs.com/kissdodog/archive/2013/06/14/3135412.html
dbcc 批量整理索引碎片
https://blog.csdn.net/gaofeng2000/article/details/8536591
内部索引碎片,对查询性能影响很大。
视图索引
消息 10121,级别 16,状态 1,第 1 行
无法对视图 "HN-SafeExamCore.dbo.V_CertExamApplicationMax2" 创建 索引,因为其中包含 HAVING 子句。请考虑删除 HAVING 子句。
多字段索引
有数据库自动决定采用哪条索引来查找记录
性能优化
SQL Server 性能优化详解
https://blog.csdn.net/3150379/article/details/55520890
测试服务器上模拟生产环境负载
SQL profiler
第一步:应用正确的索引
第二步:创建适当的覆盖索引
SELECT object_name(dt.object_id) Tablename,si.name IndexName,dt.avg_fragmentation_in_percent AS ExternalFragmentation,dt.avg_page_space_used_in_percent AS InternalFragmentation FROM ( SELECT object_id,index_id,avg_fragmentation_in_percent,avg_page_space_used_in_percent FROM sys.dm_db_index_physical_stats (db_id('HN-SafeExamCore'),null,null,null,'DETAILED' ) WHERE index_id <>0) AS dt INNER JOIN sys.indexes si ON si.object_id=dt.object_id AND si.index_id=dt.index_id AND dt.avg_fragmentation_in_percent>10 AND dt.avg_page_space_used_in_percent<75 ORDER BY avg_fragmentation_in_percent DESC
使用下面的规则分析结果,你就可以找出哪里发生了索引碎片:
1)ExternalFragmentation的值>10表示对应的索引发生了外部碎片;
2)InternalFragmentation的值<75表示对应的索引发生了内部碎片。
填充因子
页面的填充率,应填充多少
FILLFACTOR=90
设90%时,页面空余10%的样子
如何设置填充因子的值并没有一个公式或者理念可以准确的设置。使用填充因子虽然可以减少更新或者插入时的分页,但同时因为需要更多的页,所以降低了查询的性能和占用更多的磁盘空间.如何设置这个值进行trade-off需要根据具体的情况来看.
具体情况要根据对于表的读写比例来看,我这里给出我认为比较合适的值:
当读写比例大于100:1时,不要设置填充因子,100%填充
当写的次数大于读的次数时,设置50%-70%填充
当读写比例位于两者之间时80%-90%填充
https://www.cnblogs.com/kissdodog/archive/2013/06/14/3135412.html
性能优化
数据库集群
由二台或更多物理上独立的服务器共同组成的“虚拟”服务器称之为集群服务器。一项称做MicroSoft集群服务(MSCS)的微软服务可对集群服务器进行管理。一个SQL Server集群是由二台或更多运行SQL Server的服务器(节点)组成的虚拟服务器。如果集群中的一个节点发生故障,集群中的另一个节点就承担这个故障节点的责任。
数据库集群介绍
https://zhidao.baidu.com/question/1765750599720785580.html
SQL Server数据库读写分离提高并发性
讲解得非常详细,有各种方案的对比说明。 其中提到: Always on 技术要求操作系统必须是: 企业版。限制较大
http://www.cnblogs.com/easypass/p/7161839.html
SQLServer2012 双库定时同步
新增自定义的作业
同样问题
https://bbs.csdn.net/topics/380156617
可以容忍脏读 可以用nolock 或者未提交读隔离级别直接在A上访问
可以在A上 再安装一个实例,然后对A上原库做订阅复制到 A上新增的实例上。对订阅库(新实例上的库)进行读,原A库写。
发布与订阅
参考资料
讨论得好激烈:
https://bbs.csdn.net/topics/350241768
SQL Server数据库同步问题
http://blog.sina.com.cn/s/blog_7b1e66670101axsb.html
发布类型说明
https://www.cnblogs.com/running-mydream/p/4412784.html
快照发布: 直接扫描同一时刻的数据库状态 。 把所有出版数据中的数据从源数据库送至目标数据库,而不仅仅是变化的数据。
合并发布: 在代理服务器上进行相关操作,相当于2个数据库都有作用了。
请求订阅需要订阅服务器定期查看分发服务器是否有可用更新。如果存在可用更新,则订阅服务器更新数据。
联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息
快照复制 每天定时推送数据(可以设置到 晚上)
创建分发服务器时间: 大约30秒
事务复制
速度能做到很快,秒级。但测试结果是只能 主 -> 从 的模式
还原备份文件并修改数据库名
各个模式的使用用途详细介绍:
http://www.cnblogs.com/lhxsoft/p/5519111.html
SQLServer2012 企业版, Always on 技术
从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
https://www.cnblogs.com/lyhabc/p/4682986.html
在同一台服务器上做读写分离
效果不大,因为
sql server几种读写分离方案的比较
http://www.cnblogs.com/liwei225/p/4572111.html
为什么要在服务层设计读写分离
http://blog.sina.com.cn/s/blog_6e1bd8350102uwy6.html
读写分离规划
https://cloud.tencent.com/developer/article/1046741
http://www.360doc.com/content/14/0423/08/10504424_371312710.shtml
SQL Server 2012配置Always On可用性组
主要硬件设备: 3台机器,分别是: 决策机器; 主机; 从机
https://www.cnblogs.com/Arlar/p/8818107.html
Always On 操作笔记
留意主副本机器和各个辅助副本机器的扇区是否一致
fsutil fsinfo ntfsInfo D:
Always On 文章经验
最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目
https://www.cnblogs.com/lyhabc/p/6131034.html
聚集索引设置
总结两篇文章作者的结论,无序GUID作为主键以及作为聚集索引所带来的问题包括:
空间的浪费以及由此带来的读写效率的下降。
更主要的,存储的碎片化(fragmentation)以及由此带来的读写效率严重下降。
所以,尽量避免用GUID(无序或有序)做主键,不要用无序GUID做聚集索引。
https://www.cnblogs.com/zhouruifu/archive/2012/04/18/2454088.html
恢复数据库,并修改恢复数据库的名字
https://www.cnblogs.com/wancy86/p/db_restore.html
【注意】使用如下 sql 语句恢复数据库时,必须首先新建好数据库 HN-SafeExamCore-Sub
RESTORE DATABASE [HN-SafeExamCore-Sub] FROM DISK ='C:\es-opt\2018_11_15T01_00_00_797Core.bak' with nounload, replace, stats = 10, MOVE 'HN-SafeExamCore-Sub' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\HN-SafeExamCore-Sub.mdf', MOVE 'HN-SafeExamCore-Sub_log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\HN-SafeExamCore-Sub_log.ldf' GO
同一台机器上建立发布和订阅演示
https://blog.csdn.net/qq_33022911/article/details/79604124
发布 'HN-SafeExamCore' 的初始快照尚不可用。
在快照同步的数据库上,查看数据库状态,点击启动代理。
对路径“D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\ReplData\unc\WIN-OSN0FQ89IR5_HN-SAFEEXAMCORE_HN-SAFEEXAMCORE\20181226143453\”的访问被拒绝。
给目录 ReplData D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\ReplData 添加 everyone 的读写权限
参考: https://blog.csdn.net/qq_33022911/article/details/79604124
这个文件夹要赋予SQL Server Service和Agent Service读写权限。
https://www.cnblogs.com/zhengcheng/p/4492423.html
SQLServerAgent 错误: 运行作业 WIN-OSN0FQ89IR5-HN-SafeExamCore-HN-SafeExamCore-2 的请求(来自 用户 WIN-OSN0FQ89IR5\Administrator)被拒绝,因为该作业已应 用户 WIN-OSN0FQ89IR5\Administrator 的请求正在运行.
已将数据库上下文更改为 'HN-SafeExamCore'。 (Microsoft SQL Server,错误: 22022)
原因:正在运行作业,等待。
未运行,“严重”状态下的性能
也可以间隔定时任务时间,等下一次执行时,就不会出现此问题。或者修改报警阀值
原因:
订阅端未启动代理。
解决方案:
在订阅端查看同步状态,启动代理即可。
https://www.cnblogs.com/suther/archive/2012/11/12/2766353.html
在复制监视器中查看发布和订阅状态
https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2012/ms151271(v=sql.110)
测试结果
1、2个数据库都修改了内容,主服务器的内容会覆盖订阅服务器的内容
只读方式连接连接数据库
无效果
<add key="DirectCoreDataSourceSetting" value="Data Source=192.168.1.112;ApplicationIntent=ReadOnly; Initial Catalog=HN-SafeExamCore-Sub;Persist Security Info=True;User ID=sa;Password=AAAaaa123; Pooling=true;Max Pool Size = 300;Min Pool Size=0;Connection Lifetime = 300;"/>
http://www.cnblogs.com/chonghanyu/p/5709780.html
对等发布
【经验】
1. 2台数据库上都需要创建分发服务器
2. 只需要在一台数据库上配置 对等拓扑 即可
3. 好麻烦呀,还需要配置账号登录在数据库中的权限等
SQL 对等发布
https://blog.csdn.net/hanjun0612/article/details/79441962
SQL Server 对等事务复制---读写分离
https://bbs.csdn.net/topics/390859258
SQL Server 对等复制配置与设定
https://www.cnblogs.com/Frank-Zhao/archive/2012/11/09/2763274.html
问题及解决
服务器实例“DESKTOP-T88F1PQ”没有配置分发服务器,因此不能作为对等方。
【解决办法】在客户端上也配置好分发服务器
对等拓扑 找不到该订阅。发布服务器 的名字必须一样
【解决办法】双方数据库都需要建立分发服务器
对等发布仅支持值为 'replication support only', 'initialize with backup' or 'initialize from lsn' 的 '@sync_type' 参数。
无法在数据库“TestSync”中删除订阅服务器“DESKTOP-T88F1PQ”上的订阅。
未将 'DESKTOP-T88F1PQ' 定义为 'WIN-KNUE949VKKC' 的订阅服务器。
无法更新分发数据库订阅表。无法更改订阅状态。
下面存储过程的参数是 数据库名
EXEC sp_removedbreplication 'TestSync'
https://blog.csdn.net/huyu107/article/details/51098462?utm_source=blogxgwz6
运行作业 WIN-KNUE949VKKC-TestSync-1 的请求(来自 用户 sa)被拒绝,因为该作业已应 用户 sa 的请求正在运行
SQL Server 代理 / 错误日志 : 当前 文件日志,【选中“SQL Server”选项】打开看到如下信息:
Login failed for user 'WIN-KNUE949VKKC\sqladmin'. 原因: 找不到与提供的名称匹配的登录名。 [客户端: <local machine>] 错误: 18456,严重性: 14,状态: 5。
sqlserver 2012 IDE中 Windows身份验证连接服务器报错 ,Login failed for user 'xxx\Administrator'. 原因: 找不到与提供的名称匹配的登录名。
https://www.cnblogs.com/feifeitu/p/9056200.html
合并发布
采用合并发布的方式 创建 发布与订阅
【此方案存在问题】所有合并项目都必须包含带有唯一索引的 uniqueidentifier 列和 ROWGUIDCOL 属性。SQL Server 将在生成第一个快照时向没有 uniqueidentifier 列的已发布表添加该列。
导致没有列列表的 INSERT 语句失败
如果遇到创建订阅数据库失败时,检查下 发布服务器 的快照 状态是否创建成功。如果没有创建成功,那么先等待完成后再处理。
创建快照时间大约用了 25分钟
SQLServer2005合并复制过程中经常出现“进程无法连接到订阅服务器Subscriber”,请问是什么原因?
【解决办法】完整备份恢复后,再立即创建发布与订阅。
(反正我是尝试了好几次,有时行,有时不行。注意上面的要求!)
发布与订阅相关资料
SQL Server 2012复制教程以及复制的几种模式
https://www.cnblogs.com/lhxsoft/p/5519111.html
SQL SERVER 使用订阅发布同步数据库
http://www.cnblogs.com/zhengcheng/p/4492423.html
【求助Admin(讨论)】关于sql复制的。无法连接到订阅服务器 .
http://bbs.51cto.com/thread-1120810-1.html
SQLServer2005合并复制过程中经常出现“进程无法连接到订阅服务器Subscriber”,请问是什么原因
SQL Server 主从复制时本地订阅提示 进程无法连接到 Subscriber “***”
是因为我没有设置UDP端口开放导致的,现在已经解决了,多谢回复。
https://bbs.csdn.net/topics/392153532
问题及解决
消息 2725,级别 16,状态 2,第 6 行
不能对 索引“PK_TESTQUESTION”执行联机操作,因为该索引包含数据类型为 text、ntext、image 或 FILESTREAM 的列“ExamText”。对于非聚集索引,该列可能是索引的包含列。对于聚集索引,该列可能是该表的任何列。如果使用 DROP_EXISTING,则该列可能是新索引或旧索引的一部分。该操作必须脱机执行。
暂时先不优化这个数据库表 把选项参数设置: ONLINE=OFF
联机索引操作只能在 SQL Sever Enterprise Edition 中执行
https://bbs.csdn.net/topics/270085623
SQL Server只能企业版才支持online
CPU 占用那么大 分析原因
登录过程中缺乏 准考证号 索引
占用时间在 200多毫秒以上
CPU占用在50%以上
都需要特别关注。
如何查询数据库是否为企业版
SELECT SERVERPROPERTY('productversion') as '产品版本', SERVERPROPERTY ('productlevel') as '产品级别' , SERVERPROPERTY ('edition') as '版本'
导出表结构
导出的是1个表的结构
SELECT 字段名 = A.name, 类型 = CASE WHEN b.name IN ( 'varchar', 'nvarchar' ) THEN b.name + '(' + CAST(COLUMNPROPERTY(a.id, a.name, 'PRECISION') AS VARCHAR(4)) + ')' WHEN b.name = 'decimal' THEN b.name + '(' + CAST(COLUMNPROPERTY(a.id, a.name, 'PRECISION') AS VARCHAR(4)) + ',' + CAST(COLUMNPROPERTY(a.id, a.name, 'Scale') AS VARCHAR(4)) + ')' ELSE b.name END, 是键 = Case When COLUMNPROPERTY( A.id,A.name,'IsIdentity')=1 Then 'TRUE'Else 'FALSE' End, 主键 = Case When exists(SELECT 1 FROM sysobjects Where xtype='PK' and parent_obj=A.id and name in ( SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = A.id AND colid=A.colid))) then 'TRUE' else 'FALSE' end, 默认值 = isnull(E.Text,''), 描述文本 = isnull(G.[value],'') FROM syscolumns A Left Join systypes B On A.xusertype=B.xusertype Inner Join sysobjects D On A.id=D.id and D.xtype='U' and D.name<>'dtproperties' Left Join syscomments E on A.cdefault=E.id Left Join sys.extended_properties G on A.id=G.major_id and A.colid=G.minor_id Left Join sys.extended_properties F On D.id=F.major_id and F.minor_id=0 where d.name='sys_user_token' --如果只查询指定表,加上此条件 Order By A.id,A.colorder
资料
SQL Server性能优化案例分享(1)——CPU持续过高——CPU高使用率的常见原因及处理方向
https://blog.csdn.net/DBA_Huangzj/article/details/79517925
SQL Server 手把手教你使用profile进行性能监控,sqlprofile介绍
http://www.bkjia.com/Sql_Server/1188602.html#top
SQLServer导出数据库中表结构信息的方法
https://blog.csdn.net/zxy0425/article/details/64441875
SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所有字段的名称
https://www.cnblogs.com/ynbt/archive/2012/07/16/2593389.html
问题及解决
Win10 SQLServer服务没有自启动
修改 Text 服务启动
修改 SQL Server 启动为延迟启动
https://blog.csdn.net/cpongo2/article/details/85341400
数据库提示(正在恢复...)
无法操作...
restore database [HN-SafeExamCore] with recovery
https://bbs.csdn.net/wap/topics/330041399
内存占用过高,几乎全部占满
可添加最大内存限制
重启服务
https://blog.csdn.net/shenwb110/article/details/74987577
SQL SERVER的最大服务器内存限制,因为SQL SERVER总是会不断的占用服务器内存,所以一般都需要设置下最大使用内存,通常是服务器总内存的90%左右。
https://www.cnblogs.com/xiongnanbin/p/8206268.html
Sql Server Reporting Services Service 占用内存过高
查版本
select @@version
MICROSOFT SQL SERVER 2012 标准版激活码序列号: YFC4R-BRRWB-TVP9Y-6WJQ9-MCJQ7
卸载完成了SQL server 2012
https://www.cnblogs.com/Amedeo/p/6814851.html#_labelTop
标准版与企业版的区别
SQL Server 2012 各版本功能比较
https://www.cnblogs.com/atree/p/SQL_Server_2012_Enterprise_Standard.html
升级教程
用 安装包,启动,选择选项,重新执行
https://wenku.baidu.com/view/1886d77d915f804d2b16c19f.html
只能在 SQL Server Enterprise Edition 中创建分区函数。
1. 标准版能否实现分区的替代方案
2. 物理分区行不行(建2个网站)
3. 升级数据库(不推荐)
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
Oct 19 2012 13:38:57
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
企业版与开发版的区别
https://www.cnblogs.com/POLzj/p/5989770.html
日志文件占用过大
收缩日志
SqlServer在使用中会产生大量的日志文件,当不需要的时候可以进行删除。
删除方式:
右键数据库-->任务-->收缩-->文件
有时候收缩并不成功,这是因为 数据库还没有设置为简单模式,操作如下:
右击数据库名->点'属性'->点'选项'->恢复模式改成'简单'->点'确定'按钮,
https://blog.csdn.net/nidongde521/article/details/73480340
插入操作太慢
开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种。它等同于 READUNCOMMITTED 。 具体的功能作用如下所示(摘自MSDN):