柚子快报邀请码778899分享:Sqlserver

http://www.51969.com/

书籍

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文件读取的耗时操作

加快查询、修改和创建

 

数据是分段的,如以年份为分隔的数据,对于当年的数据经常进行增删改查操作,而对于往年的数据几乎不做操作或只做查询操作,这种情况可以使用分区表。

参考资料

Sql Server系列:分区表操作

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])

 

删除分区

关于SQL Server中分区表的文件与文件组的删除(转)

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个数据库都修改了内容,主服务器的内容会覆盖订阅服务器的内容

只读方式连接连接数据库

无效果

 

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'. 原因: 找不到与提供的名称匹配的登录名。 [客户端: ]

错误: 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”,请问是什么原因?

https://social.msdn.microsoft.com/Forums/en-US/a0467848-19a7-4bb4-ac6d-ce8de6251fd6/sqlserver20052151224182227972104636807312432001332463241202098629616?forum=sqlserverzhchs

【解决办法】完整备份恢复后,再立即创建发布与订阅。

(反正我是尝试了好几次,有时行,有时不行。注意上面的要求!)

发布与订阅相关资料

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”,请问是什么原因

https://social.msdn.microsoft.com/Forums/en-US/a0467848-19a7-4bb4-ac6d-ce8de6251fd6/sqlserver20052151224182227972104636807312432001332463241202098629616?forum=sqlserverzhchs

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 (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):

柚子快报邀请码778899分享:Sqlserver

http://www.51969.com/

查看原文