
运维调优
运维相关
吉普赛的歌
这个作者很懒,什么都没留下…
展开
-
诊断索引健全性的新工具
概览:索引碎片索引使用情况索引操作活动下载这篇文章的代码: DyessSQLIndex2007_03.exe (151KB)在所有 SQL Server 性能调整检查表中的主要项目之一便是调整数据库中的索引。SQL Server 查询优化器在执行查询期间是否能够正确使用索引不仅取决于是否创建了有效的索引,还取决于索引是否健全。借助 SQL Serve转载 2014-10-23 16:40:13 · 863 阅读 · 0 评论 -
Use PerfMon to Diagnose Common Server Performance Problems
原文:点击打开链接假如您周一早晨刚到办公室就遇到一位心急如焚的用户抱怨自己的服务器运行速度太慢。您会如何着手帮助他?性能监视器是 Windows® 中内置的一款非常便利的工具,可帮助您诊断有关性能的问题。要使用“性能监视器”,您可以在命令提示符下键入 perfmon,或从“管理工具”菜单中选择“性能”或“可靠性和性能监视器”(在 Windows Vista® 和转载 2016-11-29 17:35:48 · 466 阅读 · 0 评论 -
SQLServer找出执行慢的SQL语句
SELECT(total_elapsed_time / execution_count)/1000 N'平均时间ms',total_elapsed_time/1000 N'总花费时间ms',total_worker_time/1000 N'所用的CPU总时间ms',total_physical_reads N'物理读取总次数',total_logical_reads/execution_转载 2014-10-24 11:34:35 · 1041 阅读 · 0 评论 -
利用sys.sysprocesses检查SqlServer的阻塞和死锁
视图中主要的字段: 1. Spid:Sql Servr 会话ID 2. Kpid:Windows 线程ID 3. Blocked:正在阻塞求情的会话 ID。如果此列为 Null,则标识请求未被阻塞 4. Waittype:当前连接的等待资源编号,标示是否等待资源,0 或 Null表示不需要等待任何资源 5. Waittime:当前等待时间,单位为毫秒,0 表示没有等待 6.转载 2014-10-23 16:04:25 · 1774 阅读 · 0 评论 -
SQL Server 数据库开发规范
数据库版本的选择SQL Server 目前常见版本有 : 2005、2008、2012、2014、2016、2017……后面谈及 SQL Server 的版本前面不再加 “SQL Server” 字样,仅用 4 位数字代替。根据服务器上的操作系统及公司常用的数据库版本,结合项目的需要,选择较新的版本为佳。注:SQLServer版本与操作系统密切相关, 如:Win2003 无法安装 2012 及 2...原创 2018-04-28 13:35:03 · 2839 阅读 · 1 评论 -
sqlserver内存释放
原文: 点击打开链接转载 2014-09-15 17:16:41 · 1864 阅读 · 0 评论 -
用 system_health 来查看死锁与解决死锁
system_health 扩展事件是 SQL Server 自带的系统扩展事件, 从 SQL Server 2012 起就有了, 而且是默认运行的。这点对于我们查看死锁就非常方便了。执行:select substring(path,0,charindex('_',path)-3) as directory from sys.traces可以定位到对应的目录下, 进入查看以 "sy原创 2017-04-19 09:40:04 · 3805 阅读 · 0 评论 -
UPDATE 失败,因为下列 SET 选项的设置不正确: ‘QUOTED_IDENTIFIER‘。
设置了一个作业,步骤里的sql 就是两个简单的 update 语句。手工执行没有任何问题,但放在作业里执行就出错了。已以用户 xxx\Administrator 的身份执行。 UPDATE 失败,因为下列 SET 选项的设置不正确: 'QUOTED_IDENTIFIER'。请确保 SET 选项正确无误,可以用于 计算列上的索引视图和/或索引和/或筛选的索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。。 [SQLSTATE 42000] (错误 1934). 该步骤失败。处..原创 2020-10-01 00:47:28 · 2322 阅读 · 0 评论 -
存储过程日志表
DROP TABLE DBA_proc_logIF OBJECT_ID('dbo.DBA_proc_log') IS NULLBEGIN CREATE TABLE dbo.DBA_proc_log( logId BIGINT IDENTITY(1,1) PRIMARY KEY , procName VARCHAR(50) NOT NULL, beginTime DATETIME原创 2017-03-15 16:08:56 · 2033 阅读 · 0 评论 -
sql server 2005实现双机热备份
预备知识: 数据库镜像基本概念http://msdn2.microsoft.com/zh-cn/library/ms177412.aspxhttp://msdn2.microsoft.com/zh-cn/library/ms189852.aspx--------一 准备工作-----------------(一) 安装三个实例,分别为:-----SZDXBAK\转载 2014-05-22 09:14:55 · 1514 阅读 · 0 评论 -
三种东西永远不要放到数据库里
原文:点击打开链接我已经在很多演讲里说过,改进你的系统的最好的方法是先避免做“蠢事”。我并不是说你或你开发的东西“蠢”,只是有些决定很容易被人们忽略掉其暗含 的牵连,认识不到这样做对系统维护尤其是系统升级带来多大的麻烦。作为一个顾问,像这样的事情我到处都能见到,我还从来没有见过做出这样的决定的人有过好 的结果的。图片,文件,二进制数据既然数据库支持BLOB类型的数据,把文件转载 2017-03-31 15:00:12 · 389 阅读 · 0 评论 -
CPU高时的处理
--使用CPU最多的前 50 条语句SELECT q.dbid, DB_NAME(q.dbid) AS dbName, q.objectid, OBJECT_NAME(q.objectid) AS objectName, q.number, q.encrypted, q.[text], highest_cpu_queries.*FROM ( S原创 2014-10-28 14:43:17 · 832 阅读 · 0 评论 -
关于时间戳timestamp的说明
--A. 作用: 防止用户A、用户B同时修改某条数据,获取时该记录的时间戳是 xx 。用户A先保存数据, 保存时先判断时间戳有无变化,无变化则可以保存,后此记录的时间戳变成 yy.用户B后保存数据,保存时时间戳已变化,提示数据已发生变化不能继续保存。但这个整个的流程(判断时间戳是否已变化及是否允许下一步的保存)并不是自动的, 需要程序或者存储过程来控制。--B. 导入数原创 2014-05-08 11:07:05 · 3719 阅读 · 0 评论 -
DBA案例分析:如何解决CPU占用100%的问题
原文: 点击打开链接转载 2014-10-24 10:03:11 · 1343 阅读 · 0 评论 -
死锁查询
原文: 点击打开链接use master --必须在master数据库中创建 go if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_lockinfo]') and OBJECTPROPERTY(id, N'IsP转载 2015-01-02 21:45:22 · 1087 阅读 · 0 评论 -
等待状态CXPACKET分析
原文:点击打开链接最近由于两节的原因,一些抓取服务器都频频报告CPU 100%,上去看了下,结果单个的查询和存储过程执行时间都是这里涉及两个值:cost threshold for parallelism 是默认设定 5S. the estimated cost 高于5S才安排并发sp_configure 'show advanced options',转载 2016-03-16 14:59:16 · 4650 阅读 · 0 评论 -
对分布式事务及两阶段提交、三阶段提交的理解
原文: https://www.cnblogs.com/binyue/p/3678390.html在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。1.什么是数据一致性在数据有多份副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就造成各个副本之间的数据不一致,数据内容冲突。...转载 2018-11-01 08:06:13 · 350 阅读 · 0 评论 -
DBA注意事项
1. 安全性生产环境的数据,要非常慎重,尽量不要往生产环境的库中写入数据。更不能修改生产环境的数据。不让不相关人员进入生产环境。2. 严谨性要考虑到最差的情况、我们面对的可能是并不规范、并不严谨的数据库表结构,而且可能是非常复杂的生产环境。对于可能出错的地方,要做异常处理,建立预警机制。原创 2014-03-11 16:41:00 · 1250 阅读 · 0 评论 -
sysproccesses 的应用
SELECT (SELECT text FROM sys.dm_exec_sql_text(a.sql_handle)) AS [sql],A.* from master..sysprocesses A where spid>50 AND [dbid]=DB_ID() --AND [status]!='sleeping' --AND sql_handle!='0x000000000原创 2014-10-23 16:38:23 · 803 阅读 · 0 评论 -
DBA大牛站点
1. http://www.cnblogs.com/kissdodog/p/3662144.html原创 2014-08-14 11:25:18 · 915 阅读 · 0 评论 -
将扩展事件(慢SQL)内容插入到表中并预警
建立慢SQL的扩展事件见:点击打开链接扩展事件是个好东西, 但是手动打开比较麻烦, 而且还比较慢。下面的存储过程可以获取到相关的数据, 并插入到 DBA_SlowQueryEvent 表中。 用一个作业每5分钟执行一次此存储过程。因为是取增量数据, 此存储过程也并不慢, IO好点的机器一般在1秒内。以后查慢SQL,只需要查 DBA_SlowQueryEvent 表即可, 做预警也方原创 2017-08-23 11:14:08 · 528 阅读 · 0 评论 -
如何查找具有最多锁定的对象
原文:点击打开链接SQL Server 2008其他版本数据库管理员通常需要识别影响数据库性能的锁定来源。例如,可以监视生产服务器是否存在任何可能的瓶颈。您怀疑可能存在高度争用的资源,并希望了解这些对象占用多少锁定。一旦识别锁定频率最高的对象,便可采取一些措施来优化对争用对象的访问。为此,请使用 S转载 2016-06-08 16:23:10 · 574 阅读 · 0 评论 -
扩展事件——跟踪超过3秒的sql
-- 删除事件会话 IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name = 'slow_query') DROP EVENT SESSION slow_query ON SERVER GO -- 创建事件会话 CREATE EVENT SESSION [slow_query] ON SERVER原创 2016-09-20 09:29:44 · 1350 阅读 · 0 评论 -
用扩展事件捕获死锁
另有利用现成系统自带扩展事件查看死锁:点击打开链接一、打开 SSMS , 找到 “扩展事件”->"会话"->“新建会话向导”:二、会话名称为: Deadlock_Monitor三、不使用模板四、事件库文本框键入: deadlock , 将 xml_deadlock_report 加到右边五、选择一些需要的字段, 不选择也没关系(因为我们只需要知道死锁是怎么造成的就可以了)六、直...原创 2017-10-19 17:20:47 · 1060 阅读 · 0 评论 -
参数嗅探导致缓慢案例
日期: 2017-02-22症状:反馈网站登录超时缓慢;用活动监视器和 Proc_DBA_GetSlowSQL_ByCPU 都可以看到这条SQL占用了比较多的CPU时间;每隔一段时间(时间不定,一个月或几个月)可能就出现一次,重启SQL Server会恢复正常(如是存储过程加个空格修改一下也能恢复正常);实际在 SSMS 上执行很快。 专业上的说法叫:参数嗅探这种其实出原创 2017-02-22 17:48:43 · 1098 阅读 · 1 评论 -
“正在恢复” 的数据库如何处理?
一般来说, 这是因为一个大事务, 让数据库卡着了, 如果数据库重要, 只能让它慢慢还原, 还原的进度可以用xp_readerrorlog 存储过程来看。 但是, 如果日志太大, 你又等不了, 那只能删除日志, 让数据库先跑起来了。下面模拟了这个场景,并作了修复:本人的另一篇相关文章:点击打开链接--注意:按序号分开执行--1. 创建测试库USE [master]GOIF EXISTS(SE...原创 2018-05-14 13:49:53 · 9746 阅读 · 0 评论 -
SQL Server处理损坏的表
症状:无法备份。在 drop table 时报错:Location: AllocPageRef.cpp:62Expression: aid == idSPID: 71Process ID: 4388 (这个是sqlserver 的进程) 消息 3624,级别 20,状态 1,第 1 行系统断定检查已失败。有关详细信息,请查看 SQL Server 错误日志消息 0,级别 20,状态...原创 2018-05-22 17:46:40 · 2110 阅读 · 2 评论 -
一次归档引起的磁盘爆满
归档数据, 简单点来说就是将不需要的数据从源库转移到归档库(表)。一般来说, 最好是用分区表做归档, 因为分区表有 alter table xx switch 这个功能, 可以一次性将不需要的分区切到一个新表, 这个在速度上就是秒杀, 最方便不过了。不过, 临时需要归档数据, 就只能复制数据, 再删除不需要的数据了。我的步骤:一、将源库中的3个源表(两个3千万左右,一个1亿多)用导...原创 2018-07-19 22:16:05 · 368 阅读 · 0 评论 -
模糊查询的参数嗅探
表 t , 有复合索引 ix_t_p1_p2,p1 的筛选性不是很高。无论加不加 option(recompile) , 执行计划走的都是索引查找,但不加时, 因为无法准确识别参数中的%, 导致执行计划错误。这个不用 option(recompile) 就无解了。因为毕竟是传入值,不能直接拼SQL(担心有注入风险)。试过末尾添加:OPTION (OPTIMIZE F原创 2017-09-20 17:09:18 · 556 阅读 · 0 评论 -
The transaction log for database 'dbname' is full due to 'LOG_BACKUP'.
The transaction log for database 'dbname' is full due to 'LOG_BACKUP'.xx库的事务日志已满,需要进行日志备份。看了一下, 是一个不太重要的库, 设置为了完整模式, 日志没有日常的备份计划, 但又限制了大小。处理方式:1. 先改恢复模式为简单;2. 收缩日志文件。为了便于操作, 将实例上所有的DB全原创 2018-03-27 09:22:54 · 12174 阅读 · 0 评论 -
option 子句的威力
接报障, 短信页面分页超时(.net 中默认最长超时时间为 30秒 ), 语句如下:set statistics io onset statistics time onDECLARE @firstareaid BIGINT = 635098215722270914, @sendTime_Start DATETIME = '2017/10/20 0原创 2017-10-29 20:39:40 · 530 阅读 · 0 评论 -
一台执行缓慢CPU偏高的DB服务器的处理
一台生产环境的 Windows Server2008 的DB服务器, 数据库为 SQL Server2014 (无补丁), 经常发生 CPU 偏高(经常跳到80%,90%, 平均也有 45%左右 )。配置(虚拟机):但奇怪的是这台机基本上没有用户访问, 一天都不到一次, 主要是监控的SQL和同步的SQL, 一般来说这点SQL不足以将资源占尽。剩余内存大约只有 100MB原创 2018-03-09 15:38:13 · 531 阅读 · 2 评论 -
Alwayson 同步模式的坑
一个生产库, 使用量不算特别大, 内存 64GB, 数据库 60 GB左右。IO 也非常不错,虽然是虚拟机,但性能很好。版本: SQL Server2014 企业版。 搭建了 Alwayson , 同步模式、自动故障转移。奇怪的是, 用扩展事件捕获到的慢SQL特别多(但占用CPU很低), 用户实际使用也比较慢, 连纯插入语句都很慢, 一天产生几万数据量的表插入居然要几秒(无更新和删除,原创 2017-10-26 15:39:20 · 4644 阅读 · 0 评论 -
解决分区表归档(switch)失败
错误信息:'ALTER TABLE SWITCH' 语句失败。表'dbName.dbo.tableName' 已分区,但 索引'IX_indexName' 未分区。网上找了很多都解决不了,摸索一番总算搞定了。解决方法:先删除这个表上除主键之外的所有索引, 然后添加索引(基于分区方案上的分区列)脚本:IF EXISTS(SE原创 2016-11-07 15:20:35 · 1325 阅读 · 1 评论 -
windows故障转移集群 “群集事件” 经常出现 1135 错误的解决
以前一直以为是没有双网卡导致的,后来有个集群全是双网卡, 也有这个问题,所以排除了不是双网卡的原因。后来发现跟虚拟底层系统(ESXi)有关,底层系统连不上硬盘了,虚拟机自然也会有问题了,两者出问题的时间能对上(如下图)。将虚拟机迁移之后,问题解决。原创 2018-04-08 11:20:40 · 3309 阅读 · 1 评论 -
用活动和监视器来优化数据库
活动和监视器是在 SQL Server 2008 及以上才有的功能。用这个可以快速找出数据库中消耗较大的SQL并优化, 可谓DBA之利器。1. 在连接上右键, 找到“活动和监视器”即可打开:2. 打开后点击 CPU 时间 列头,使之降序排列。 3. 找到消耗比较大的(前几行)SQL, 右键“显示执行计划”4. 在查看执行计划时, 如果有缺失索引会以绿色文原创 2017-10-09 20:42:47 · 2094 阅读 · 0 评论 -
一次 Alwayson 故障处理
发现故障:主副本数据库显示 “未同步”, 主副本服务器上的集群服务无法启动。数据库已不可使用。在 SSMS 界面, 直接删除可用性组不可行, 改为在 Windows群集中删除应用程序后可以删除可用性组了:再执行RESTORE DATABASE dbName WITH RECOVERY;使数据库可正常使用, 应急。后来认为是 dns 解析不正常, 处理原创 2018-04-12 15:53:32 · 2903 阅读 · 5 评论 -
在 SA 和 Windows 等账户都被禁用的情况下如何登录?
所有 sysadmin 账户都不可用,或者忘记了或者被禁用的导致无法登录,这个偶尔还是能见到的。这个确实让人着急, 为了这么点事重装SQL Server 还是不值。那如何处理呢?下面以 Win10+SQL Server2017 为例来示范操作。------------------------------------------------ 分割线 -------------------------...原创 2018-03-21 13:08:54 · 4439 阅读 · 0 评论 -
IN和OR会走索引吗?
--注:所有步骤均按序号分步单独执行,并观察对应的情况--0. USE tempdbGOIF OBJECT_ID('t') IS NOT NULL DROP TABLE tGOCREATE TABLE t(pkId INT IDENTITY(1,1) PRIMARY KEY, id VARCHAR(10) NOT NULL, room VARCHAR(10) NOT NULL, oth原创 2018-03-23 11:38:43 · 9543 阅读 · 0 评论 -
多个单列索引执行计划如何选择?
USE tempdbGOIF OBJECT_ID('t') IS NOT NULL DROP TABLE tGOCREATE TABLE t(id INT IDENTITY(1,1) PRIMARY KEY, a INT,b INT,c INT)GO--插入 1000 * 1000 = 1百万条数据;WITH cte AS (SELECT TOP 1000 1 AS id FROM原创 2018-03-28 17:32:31 · 574 阅读 · 0 评论