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

加快查询、修改和创建

 

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

参考资料

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) &nbsp;

分区函数

分区函数是数据库中的一个独立对象,它将表的行映射到一组分区,所以分区函数解决的是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个数据库都修改了内容,主服务器的内容会覆盖订阅服务器的内容

只读方式连接连接数据库

无效果

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

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
&nbsp; &nbsp; &nbsp;字段名 &nbsp; &nbsp; = A.name,
&nbsp; &nbsp; &nbsp;类型 &nbsp; &nbsp; &nbsp; = CASE WHEN b.name IN ( 'varchar', 'nvarchar' )
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;THEN b.name + '('
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + CAST(COLUMNPROPERTY(a.id, a.name, 'PRECISION') AS VARCHAR(4))
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + ')'
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WHEN b.name = 'decimal'
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;THEN b.name + '('
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + CAST(COLUMNPROPERTY(a.id, a.name, 'PRECISION') AS VARCHAR(4))
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + ','
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + CAST(COLUMNPROPERTY(a.id, a.name, 'Scale') AS VARCHAR(4))
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + ')'
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ELSE b.name
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; END,
&nbsp; &nbsp; &nbsp;是键 &nbsp; &nbsp; &nbsp; = Case When COLUMNPROPERTY( A.id,A.name,'IsIdentity')=1 Then 'TRUE'Else 'FALSE' End,
&nbsp; &nbsp; &nbsp;主键 &nbsp; &nbsp; &nbsp; = Case When exists(SELECT 1 FROM sysobjects Where xtype='PK' and parent_obj=A.id and name in (
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = A.id AND colid=A.colid))) then 'TRUE' else 'FALSE' end,

&nbsp; &nbsp; &nbsp;默认值 &nbsp; &nbsp; = isnull(E.Text,''),
&nbsp; &nbsp; &nbsp;描述文本 &nbsp; = isnull(G.[value],'')
&nbsp;FROM
&nbsp; &nbsp; &nbsp;syscolumns A
&nbsp;Left Join
&nbsp; &nbsp; &nbsp;systypes B
&nbsp;On
&nbsp; &nbsp; &nbsp;A.xusertype=B.xusertype
&nbsp;Inner Join
&nbsp; &nbsp; &nbsp;sysobjects D
&nbsp;On
&nbsp; &nbsp; &nbsp;A.id=D.id &nbsp;and D.xtype='U' and &nbsp;D.name<>'dtproperties'
&nbsp;Left Join
&nbsp; &nbsp; &nbsp;syscomments E
&nbsp;on
&nbsp; &nbsp; &nbsp;A.cdefault=E.id
&nbsp;Left Join
&nbsp;sys.extended_properties &nbsp;G
&nbsp;on
&nbsp; &nbsp; &nbsp;A.id=G.major_id and A.colid=G.minor_id
&nbsp;Left Join
&nbsp;
&nbsp;sys.extended_properties F
&nbsp;On
&nbsp; &nbsp; &nbsp;D.id=F.major_id and F.minor_id=0
&nbsp; &nbsp; &nbsp;where d.name='sys_user_token' &nbsp; &nbsp;--如果只查询指定表,加上此条件
&nbsp;Order By
&nbsp; &nbsp; &nbsp;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):

posted @ 2023-04-13 06:56  lvye1221  阅读(600)  评论(0编辑  收藏  举报