Sqlserver基础资料和性能优化资料合集

书籍

SQL Server 2012 深入解析与性能优化

https://download.youkuaiyun.com/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.youkuaiyun.com/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工具

SQL Server Profiler工具 - 逆心 - 博客园

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介绍

bkjia.com - 该网站正在出售! - bkjia 资源和信息。

数据库引擎优化顾问优化数据库

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 的查询速度提高几十倍、甚至千倍

通过非聚集索引让select count(*) from 的查询速度提高几十倍、甚至千倍_为什么count非索引字段会更快_阳泉酒家小当家的博客-优快云博客

sqlserver索引小结

https://www.cnblogs.com/lx823706/p/5531395.html

分区表

分区表 方便数据迁入迁出

索引和数据均是存储在不同文件中,可以减少I/O文件读取的耗时操作

加快查询、修改和创建

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

参考资料

Sql Server系列:分区表操作

https://www.cnblogs.com/libingql/p/4087598.html

按时间拆分

TB级SQL Server数据库表分区的实现

TB级SQL Server数据库表分区的实现_luoyanqing119的博客-优快云博客

深入浅出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 代理   添加作业任务

SQL server 2012 如何创建定时作业-百度经验

自动创建分区

sql server 任务计划 一年执行一次,每年的年底,我这么配正确吗?

sql server 任务计划 一年执行一次,每年的年底,我这么配正确吗?_百度知道

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.youkuaiyun.com/topics/390659922

索引自动重建脚本

SQL Server索引重建和重新组织脚本 - 杯中水_F - 博客园

索引碎片及填充因子结束

https://www.cnblogs.com/kissdodog/archive/2013/06/14/3135412.html

dbcc 批量整理索引碎片

SQLServer批量重建索引(整理)_sqlserver索引重建的方法_极客行天下的博客-优快云博客

内部索引碎片,对查询性能影响很大。

视图索引

消息 10121,级别 16,状态 1,第 1 行
无法对视图 "HN-SafeExamCore.dbo.V_CertExamApplicationMax2" 创建 索引,因为其中包含 HAVING 子句。请考虑删除 HAVING 子句。

多字段索引

有数据库自动决定采用哪条索引来查找记录

性能优化

SQL Server 性能优化详解

SQL Server 性能优化详解_sqlserver存储过程解析xml太慢_五维思考的博客-优快云博客


测试服务器上模拟生产环境负载

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的服务器(节点)组成的虚拟服务器。如果集群中的一个节点发生故障,集群中的另一个节点就承担这个故障节点的责任。

数据库集群介绍

什么是sqlserver的集群_百度知道

SQL Server数据库读写分离提高并发性

讲解得非常详细,有各种方案的对比说明。 其中提到: Always on 技术要求操作系统必须是: 企业版。限制较大

SQL Server数据库读写分离提高并发性 - EasyPass - 博客园

SQLServer2012 双库定时同步

新增自定义的作业

同样问题

https://bbs.youkuaiyun.com/topics/380156617

可以容忍脏读 可以用nolock 或者未提交读隔离级别直接在A上访问

可以在A上 再安装一个实例,然后对A上原库做订阅复制到 A上新增的实例上。对订阅库(新实例上的库)进行读,原A库写。

发布与订阅
参考资料

讨论得好激烈: 

https://bbs.youkuaiyun.com/topics/350241768

SQL Server数据库同步问题

新浪博客

发布类型说明

https://www.cnblogs.com/running-mydream/p/4412784.html

快照发布: 直接扫描同一时刻的数据库状态 。 把所有出版数据中的数据从源数据库送至目标数据库,而不仅仅是变化的数据。

合并发布: 在代理服务器上进行相关操作,相当于2个数据库都有作用了。

请求订阅需要订阅服务器定期查看分发服务器是否有可用更新。如果存在可用更新,则订阅服务器更新数据。

联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息

快照复制 每天定时推送数据(可以设置到 晚上)

创建分发服务器时间: 大约30秒

事务复制

速度能做到很快,秒级。但测试结果是只能 主 -> 从 的模式

还原备份文件并修改数据库名

各个模式的使用用途详细介绍:

SQL Server 2012复制教程以及复制的几种模式 - 心冰之海 - 博客园

SQLServer2012 企业版, Always on 技术

从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
https://www.cnblogs.com/lyhabc/p/4682986.html

在同一台服务器上做读写分离

效果不大,因为

sql server几种读写分离方案的比较

sql server几种读写分离方案的比较 - 活力大疯子 - 博客园

为什么要在服务层设计读写分离

新浪博客

读写分离规划

https://cloud.tencent.com/developer/article/1046741

Sql server Always On 读写分离配置方法

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
同一台机器上建立发布和订阅演示

SQL Server 2012本地发布、订阅及相关问题的解决方案_为什么sql server的复制中,没有本地发布_打锤子棒棒糖的博客-优快云博客

发布 '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 的读写权限

参考: SQL Server 2012本地发布、订阅及相关问题的解决方案_为什么sql server的复制中,没有本地发布_打锤子棒棒糖的博客-优快云博客

这个文件夹要赋予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

在复制监视器中查看发布和订阅状态

在复制监视器中查看发布和订阅状态 | Microsoft Learn

测试结果

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;"/>

.net 和 core 数据库连接字符串 - 沉默种子 - 博客园

对等发布

【经验】

1. 2台数据库上都需要创建分发服务器

2. 只需要在一台数据库上配置 对等拓扑 即可

3. 好麻烦呀,还需要配置账号登录在数据库中的权限等

SQL 对等发布

SQL 对等发布_正怒月神的博客-优快云博客

SQL Server 对等事务复制---读写分离

https://bbs.youkuaiyun.com/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'

SQL Server 无法删除发布服务_sqlserver 无法删除发布_阿蒙Amon的博客-优快云博客

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

SQLServer2005合并复制过程中经常出现“进程无法连接到订阅服务器Subscriber”,请问是什么原因?

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

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

发布与订阅相关资料

SQL Server 2012复制教程以及复制的几种模式

https://www.cnblogs.com/lhxsoft/p/5519111.html

SQL SERVER 使用订阅发布同步数据库

SQL SERVER 使用订阅发布同步数据库(转) - Builder - 博客园

【求助Admin讨论)】关于sql复制的。无法连接到订阅服务器 .

http://bbs.51cto.com/thread-1120810-1.html

SQLServer2005合并复制过程中经常出现“进程无法连接到订阅服务器Subscriber”,请问是什么原因

SQLServer2005合并复制过程中经常出现“进程无法连接到订阅服务器Subscriber”,请问是什么原因?

SQL Server 主从复制时本地订阅提示 进程无法连接到 Subscriber “***”

是因为我没有设置UDP端口开放导致的,现在已经解决了,多谢回复。

https://bbs.youkuaiyun.com/topics/392153532

问题及解决

消息 2725,级别 16,状态 2,第 6 行
不能对 索引“PK_TESTQUESTION”执行联机操作,因为该索引包含数据类型为 text、ntext、image 或 FILESTREAM 的列“ExamText”。对于非聚集索引,该列可能是索引的包含列。对于聚集索引,该列可能是该表的任何列。如果使用 DROP_EXISTING,则该列可能是新索引或旧索引的一部分。该操作必须脱机执行。

暂时先不优化这个数据库表

把选项参数设置: ONLINE=OFF 

联机索引操作只能在 SQL Sever Enterprise Edition 中执行


https://bbs.youkuaiyun.com/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高使用率的常见原因及处理方向

SQL Server性能优化案例分享(1)——CPU持续过高——CPU高使用率的常见原因及处理方向_發糞塗牆的博客-优快云博客

SQL Server 手把手教你使用profile进行性能监控,sqlprofile介绍

bkjia.com - 该网站正在出售! - bkjia 资源和信息。

SQLServer导出数据库中表结构信息的方法

SQLServer导出数据库中表结构信息的方法_sqkserver导出表结构_zxy0425的博客-优快云博客

SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所有字段的名称
https://www.cnblogs.com/ynbt/archive/2012/07/16/2593389.html

问题及解决

Win10 SQLServer服务没有自启动

修改 Text 服务启动

修改 SQL Server 启动为延迟启动

https://blog.youkuaiyun.com/cpongo2/article/details/85341400

数据库提示(正在恢复...)

无法操作...

restore database [HN-SafeExamCore] with recovery

https://bbs.youkuaiyun.com/wap/topics/330041399

内存占用过高,几乎全部占满

可添加最大内存限制

重启服务

SQL Server占用服务器内存过高_sql server运行占用内存约来越大_怒彬的博客-优快云博客

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在使用中会产生大量的日志文件,当不需要的时候可以进行删除。

删除方式:

右键数据库-->任务-->收缩-->文件

有时候收缩并不成功,这是因为 数据库还没有设置为简单模式,操作如下:

右击数据库名->点'属性'->点'选项'->恢复模式改成'简单'->点'确定'按钮,

SqlServer2012清除日志文件_Android老斑鸠的博客-优快云博客

插入操作太慢

开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种。它等同于 READUNCOMMITTED 。 具体的功能作用如下所示(摘自MSDN):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值