DBA
文章平均质量分 92
發糞塗牆
MVP, TOGAF, MCSE, Azure Solution Architect
展开
-
SQL Server On Linux(24)——SQL on Linux 备份和还原(1)——备份
本人新书上市,请多多关照:《SQL Server On Linux运维实战 2017版从入门到精通》简介 备份和还原的重要性这里就不多说了,但是需要额外提醒一下,备份和还原应该总是“一个”操作,不考虑还原的备份不能认为是有价值的备份。 本文重点在Linux上的SQL Server备份,关于Windows上的SQL Server备份,网上已经有很多成熟的资料,这里就不累赘了。 备份的...原创 2020-03-06 13:58:23 · 855 阅读 · 0 评论 -
SQL Azure工作积累(2)——Hyperscale 简介
工作需要,要评估Azure SQL DB的配置,所以整理一下网上搜集的信息,由于云产品更新迭代很快,所以今天的内容可能在不久的将来就会变更,但是这个不影响本质。本文归属:SQL Azure 工作积累(1)——添加用户到Azure SQL DB简介 截止发文之时, Azure SQL DB有两种付费模式,一种是vCore,一种是DTU,但是由于公司使用vCore为主,所以先考虑vCore...原创 2020-03-05 14:55:07 · 1618 阅读 · 0 评论 -
博客专栏第一篇文章——我眼里的DBA
在专职DBA工作一年过一个月以后,开通了CSDN的博客专栏,在第一篇文章中,我谈谈一年DBA生涯的感想,虽然我是SQL Server的DBA,但是我觉得本文适合所有DBA,顺便把这篇文章作为个人真正DBA的开端和指引:为什么要有DBA: 对于大量小公司,是请不起DBA,而且也不是非常必须的。那么DBA这个职业是如何产生的?我也不懂,个人的猜测是,当你的应用系统和数据库到达一原创 2012-08-08 21:27:47 · 18783 阅读 · 33 评论 -
Delete和Truncate的区别
一般对于没有用的数据,都会经行删除,而删除通常使用的是DELETE和TRUNCATE命令。对于有条件地删除,基本上就会使用DELETE,当然还是没有绝对,用TRUNCATE也可以实现,只要把【不需要】删除的数据插入新表,然后truncate源表,再把数据导回来或者直接重命名新表就可以了。下面例子主要比较全表删除的情况下DELETE和TRUNCATE 之间的差异: 首先,先创建测试用原创 2012-08-27 17:32:46 · 11177 阅读 · 2 评论 -
使用SQLServer 2008的CDC功能实现数据变更捕获
最近由于工作需要,研究了一下2008 CDC功能,觉得还不错,下面整理了一下研究过程,虽然比较粗略,但是基本上能用了,如果有补充请大家回复,我视情况修改原帖,谢谢。背景:在SQLServer2008之前,对数据变更的捕获通常使用触发器、时间戳等低效高成本的功能来实现,所以很多系统都没有做数据变更或者仅仅对核心表做监控。自从SQLServer2008引入了数据变更捕获功能(后面简称为原创 2012-10-30 23:35:53 · 56217 阅读 · 48 评论 -
SQL Server高可用——日志传送(4-3)——使用
顺接上一篇:SQL Server高可用——日志传送(4-2)——部署本文为本系列最重要的一篇,讲述如何使用日志传送及一些注意事项。从上一篇可以看到,其实配置不难,难是难在一旦出现问题,如何处理。这些是4大高可用的同性。配置都不会很难,只是如何故障排除而已。 监控日志传送: 在配置好日志传送之后,需要进行监控,监控备份、复制及还原的作业运作情况。这三类作业任何一个没有原创 2012-12-18 10:53:11 · 7967 阅读 · 0 评论 -
SQL Server高可用——日志传送(4-2)——部署
前文再续,书接上一回。本章演示一下日志传送的具体过程 准备工作: 由于时间关系,已经装好了3台虚拟机,且同在一个域里面: SQL01:主服务器SQL02:辅助服务器SQL03:监视服务器 初始配置: 这里是实验方便,正式环境应该由于特殊账号的读写权限。注意这里的读写权限不应该是sql内部的账号,如sa这些,而是sqlage原创 2012-12-18 10:35:01 · 9212 阅读 · 4 评论 -
SQLServer恢复表级数据
最近几天,公司的技术维护人员频繁让我恢复数据库,因为他们总是少了where条件,导致update、delete出现了无法恢复的后果,加上那些库都是几十G。恢复起来少说也要十几分钟。为此,找了一些资料和工作总结,给出一下几个方法,用于快速恢复表,而不是库,但是切记,防范总比亡羊补牢好。 在生产环境或者开发环境,往往都有某些非常重要的表。这些表存放了核心数据。当这些表出现数据损坏时,需原创 2012-12-17 21:56:42 · 29709 阅读 · 11 评论 -
SQL Server高可用——日志传送(4-4)——后续问题补充
由于使用时间不长,积累的知识不多,先留个位置,以后有问题的时候陆续补充。原创 2012-12-18 10:55:05 · 3706 阅读 · 0 评论 -
SQLServer 列出每个表的列和属性
当需要整理一个数据库帮助文档是,可能需要列出库中每个表的列及其属性。这可能在开发一些接口或者外包给别的公司时有帮助。如果需要别人打开SQL Server Management Studio (SSMS)来一个一个查看,无疑是一种折磨。 解决这个问题可以考虑使用系统的目录视图:sys.tables、sys.all_columns、sys.typesSys.tabl翻译 2013-01-02 23:40:06 · 10471 阅读 · 3 评论 -
SQLServer RESOURCE_SEMAPHORE 等待状态
概述: 当一个SQLServer实例运行得很慢的时候,应该做一些检查,如检查等待状态。最好的方法是一开始就建立一个性能基线,以便做性能对比。当发现与性能基线对比后,存在内存压力的话,就要找出是什么原因导致的。可以检查事务的等待状态,其中Resource_semaphore等待可能出现最多。下面是如何去处理这个问题: 当检查事务的所有等待类型后,可能会发现R原创 2013-01-06 23:12:50 · 7902 阅读 · 0 评论 -
第七章——DMVs和DMFs(1)
简介: 从SQLServer2005开始,微软引入了一个名叫DMO(动态管理对象)的新特性,DMO可以分为DMFs(Dynamic Manage Functions,动态管理函数)和DMVs(Dynamic Manage Views,动态管理视图)两部分。这些函数和视图用于查找SQLServer实例内部统计信息以供性能监控所用。它们提供实时的,关于SQLServer内部工作的翻译 2013-03-04 17:07:32 · 21435 阅读 · 3 评论 -
第七章——DMVs和DMFs(2)——用DMV和DMF监控索引性能
本文继续介绍使用DMO来监控,这次讲述的是监控索引性能。索引是提高查询性能的关键性手段。即使你的表上有合适的索引,你也要时时刻刻进行索引维护任务。 SQLServer有专门的DMO来显示索引相关统计信息。能帮助你分析现有索引的性能情况。通过这些DMO,可以做到:Ø 检查索引使用模式Ø 查找丢失索引Ø 查找无用索引Ø 查找索引碎片Ø 分析索引页分配明细本文将翻译 2013-03-04 17:17:36 · 5490 阅读 · 0 评论 -
第七章——DMVs和DMFs(3)——用DMV和DMF监控TempDB
前言: 我们都知道TempDB是SQLServer的系统数据库,且SQLServer的日常运作严重依赖这个库。因此,监控TempDB的性能问题尤为重要。在过去很长一段时间里面,很多人都忽略了TempDB的重要性并忽略了它的性能问题。这并不是一件好事,因为TempDB的性能会影响其他用户数据库的性能,所以需要时时刻刻注意TempDB的性能。 在一些查询的聚合、排序翻译 2013-03-04 17:27:24 · 5037 阅读 · 0 评论 -
第七章——DMVs和DMFs(4)——用DMV和DMF监控磁盘IO
前言: 本文为本系列最后一篇,作为DBA,你必须经常关注磁盘的I/O问题,一旦出现问题,要尽快分析出是什么问题。SQLServer同样提供了一些列与I/O相关的DMO来做监控。 本文介绍如何使用DMO来监控I/O子系统的性能并找到I/O瓶颈。通过本文,可以区分不同数据库的I/O使用模式。一旦发现有数据库的I/O很高,可能需要考虑把数据库迁移到单独的磁盘,或者深入翻译 2013-03-04 17:34:12 · 5411 阅读 · 0 评论 -
第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(2)
承接上文,本文讲述如何使用系统存储过程来监控系统。 SQLServer同样也提供了一系列系统存储过程用于监控SQLServer,获取当前进程、会话、请求以及锁定的详细信息。本文将演示系统存储过程来实现这些监控。 情景: 有时候你会发现应用程序突然变得很慢,经常需要等待数据库响应,此时你需要快速查看是否请求被阻塞或者挂起。 准备工作: 在本文中,将使翻译 2013-02-26 17:11:02 · 6804 阅读 · 0 评论 -
第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(3)
本文为这个系列最后一篇。将是如何使用DBCC命令来监控SQLServer日志空间的使用情况。 前言: 每个数据库都必须有事务日志。事务日志记录每个DML操作,并应用于SQLServer的数据库中,如果恢复模式为FULL并经常有DML操作,日志将增长得非常快。几时恢复模式为simple,当数据库处于事务复制或者合并复制时,日志通常会增长。如果日志不是经常备份且日志文件的翻译 2013-02-26 17:18:28 · 8272 阅读 · 0 评论 -
第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(1)
忘了说明:本系列文章出自《Microsoft SQL Server 2012 Performance Tuning Cookbook》,将会陆续推出译文,但是由于工作需要,没有按顺序贴出来。本系列文章包含三部分:1、 使用系统统计函数(system statistical functions)来监控系统健康程度。2、 使用系统存储过程来监控SQLServer进程和会话。3、翻译 2013-02-26 17:02:16 · 6005 阅读 · 1 评论 -
第四章——SQLServer2008-2012资源及性能监控(1)
性能优化的第一步是发现问题,而发现问题通常又有两类:突发问题的侦测和常规问题的侦测,对于常规问题的侦测,通常需要有一个长效的性能监控作为依据。 本系列文章介绍服务器性能监控CPU使用率监控内存使用率监控 前言: 当由于劣质的查询写法、缺失必要的索引或者数据库级别的其他情况所导致的性能问题时,可以通过使用执行计划、DMVs/DMFs、SQL Trace或者数据翻译 2013-02-26 17:44:44 · 21689 阅读 · 2 评论 -
第四章——SQLServer2008-2012资源及性能监控(3)
本文为本系列最后一章,监控内存使用。监控服务器的内存是非常重要的事情,有很多情况会引起内存消耗。所以要经常性地做检查。本文将使用可靠性和性能监视器来获取内存相关的统计。 准备工作:在开始之前,先来了解一下将要用到的计数器:Ø Memory: Available Mbytes:提供系统上可用内存的数量。Ø Memory: Pages/sec:显示有多少页被用于读或写入硬盘翻译 2013-03-01 17:06:26 · 13011 阅读 · 0 评论 -
第六章——根据执行计划优化性能(3)——键值查找
前言: 本文为本系列最后一篇,介绍键值查找的相关知识。 键值查找是具有聚集索引的表上的一个书签查找,键值查找用于SQLServer查询一些非键值列的数据。使用非聚集索引的查询不会有键值查找,但是所有键值查找会伴随非聚集索引出现。这里特别提醒的是键值查找总是伴有嵌套循环关联。 准备工作: 下面将创建一个表,通过执行计划看看键值查找的不同效果。为了产翻译 2013-03-18 17:14:46 · 9347 阅读 · 0 评论 -
第六章——根据执行计划优化性能(1)——理解哈希、合并、嵌套循环连接策略
前言:本系列文章包括:1、 理解Hash、Merge、Nested Loop关联策略。2、 在执行计划中发现并解决表/索引扫描。3、 介绍并在执行计划中发现键查找并解决它们。 对于性能优化,需要集中处理以下的问题:1、 为你的环境创建性能基线。2、 监控现在的性能并发现瓶颈。3、 解决瓶颈以便得到更好的性能。 一个预估执行计划是描述查询将会如何执行的一个翻译 2013-03-18 16:54:14 · 10213 阅读 · 0 评论 -
第六章——根据执行计划优化性能(2)——查找表/索引扫描
前言: 在绝大部分情况下,特别是从一个大表中返回少量数据时,表扫描或者索引扫描并不是一种高效的方式。这些必须找出来并解决它们从而提高性能,因为扫描将遍历每一行,查找符合条件的数据,然后返回结果。这种处理是相当耗时耗资源的。在性能优化过程中,一般集中于:1、 CPU2、 Network3、 磁盘IO而扫描操作会增加这三种资源的开销。 准备工作:翻译 2013-03-18 17:03:21 · 8243 阅读 · 0 评论 -
第十六章——处理锁、阻塞和死锁(2)——侦测阻塞和阻塞查询
前言:如果一个事务正在等待一些给其他事务锁定的资源。这个事务就被成为“被阻塞的事务”。反过来,引起阻塞的事务,也就是锁定资源并造成其他事务等待的事务叫做“正在阻塞的事务”。长时间运行事务会阻塞其他事务和查询,使他们等待长时间。在繁重的系统中,很多时候我们会遇到阻塞问题,如果一个事务因为阻塞未完成。会造成一些列的等待链。本文将介绍如何发现并马上解决这方面的问题。 准备工作:本翻译 2013-03-20 17:34:40 · 6853 阅读 · 2 评论 -
第十六章——处理锁、阻塞和死锁(1)——确定长时间运行的事务
前言:事务是OLTP系统中的主要部分。它管理数据一致性和数据并发问题,当多个资源同时被读取或者修改相同数据时,SQLServer会通过锁定机制来确保数据库中的数据总是处于一个有效状态。在SQLServer中,锁管理器是负责实现这些锁机制。SQLServer对于不同的资源类型提供不同的锁类型,如数据库、文件、对象、表、区、页和键。当你使用事务时,依然会遇到由事务引起的问题,这些通常是由于锁、翻译 2013-03-20 17:30:43 · 7321 阅读 · 0 评论 -
第十六章——处理锁、阻塞和死锁(3)——使用SQLServer Profiler侦测死锁
前言:作为DBA,可能经常会遇到有同事或者客户反映经常发生死锁,影响了系统的使用。此时,你需要尽快侦测和处理这类问题。死锁是当两个或者以上的事务互相阻塞引起的。在这种情况下两个事务会无限期地等待对方释放资源以便操作。下面是死锁的示意图:本文将使用SQLServer Profiler来跟踪死锁。 准备工作:为了侦测死锁,我们需要先模拟死锁。本例将使用两个不翻译 2013-03-20 17:54:08 · 15424 阅读 · 9 评论 -
第十七章——配置SQLServer(2)——32位和64位系统中的内存配置
前言: 本文讲述32位和64位系统中的内存配置,在SQLServer 2005/2008中,DBA们往往尝试开启AWE来限制内存。但是,在SQLServer2012以后,这个选项将被弃用,所以不能使用这种方式来控制32位实例的虚拟地址空间。如果你服务器上有很多内存,就只能升级到64位系统。下面是微软给出的内存限制: 虽然2012以后已经弃用AWE,但是了解一下32位系统翻译 2013-04-04 01:45:49 · 14992 阅读 · 0 评论 -
第十七章——配置SQLServer(3)——配置“对即时负载的优化”
前言: 在第一次执行查询或者存储过程时,会创建执行计划并存储在SQLServer的过程缓存内存中。在很多时候,我们会执行一些简单的程序,仅仅执行一次,而为这些查询创建存储过程是非常浪费内存资源的。由于内存不足,可能会导致你的缓存溢出,从而影响性能。在2005之前,这是一个大问题,为了纠正这个问题。微软在SQLServer 2008中引入了对即时查询负载的优化功能。这个功能在2012也翻译 2013-04-04 01:52:26 · 6668 阅读 · 1 评论 -
第十七章——配置SQLServer(4)——优化SQLServer实例的配置
前言:Sp_configure 可以用于管理和优化SQLServer资源,而且绝大部分配置都可以使用SQLServer ManagementStudio的图形化界面实现。 准备工作:为了查看SQLServer当前实例的配置,也可以使用下列查询来实现:SELECT *FROM sys.configurationsORDER BY name下面是本机的结果: 步骤:1、 执行下面语句,以翻译 2013-04-04 01:55:59 · 7305 阅读 · 0 评论 -
第十七章——配置SQLServer(1)——为SQLServer配置更多的处理器
前言: SQLServer提供了一个系统存储过程,SP_Configure,可以帮助你管理实例级别的配置。微软建议使用默认配置,但是基于不同的服务器、不同负载的系统和你的用法,更改配置可能会给你的性能带来好处。在32位和64位系统中,sp_configure会有一些差异。 我们经常见到SQLServer所在的服务器上还包含了如IIS、文件服务器或者域控制器这些服务或者功翻译 2013-04-04 01:42:12 · 10674 阅读 · 0 评论 -
第十三章——表和索引分区(1)——使用Range Left进行表分区
前言:如果数据表的数据持续增长,并且表中的数据量已经达到数十亿甚至更多,数据的查询和操作将非常困难,面对非常庞大的表,几时简单的增删改操作都会花费非常多的时间,如删除某个数据然后重建索引这些操作,会很难实现。在这种情况下,管理和维护查询性能就成为了一种挑战。在过去的日子,也就是2005之前,你可能需要使用分区视图来处理大数据量的数据,从2005开始,微软引入了叫做表分区的新特性。允许水平分割数据成翻译 2013-04-03 23:26:51 · 6618 阅读 · 0 评论 -
第十三章——表和索引分区(2)——使用拆分删除和加载大数据
前言: 很多时候需要对大数据量进行归档或者删除,并周期性加载大数据量到一个大表中,现在来做个简单的例子,你经常需要删除大数据量表中的大量数据。同时,你想加载大量数据到这个表中,当表中数据有数十亿时,这个操作可能消耗几个小时,但是如果你的表有分区,那么执行起来会很有效。本文将模拟删除一个季度的数据,并加载整个季度到现有表,其中使用了拆分(splitting)、合并(merging)和切翻译 2013-04-03 23:37:01 · 5447 阅读 · 0 评论 -
第十二章——SQLServer统计信息(4)——在过滤索引上的统计信息
前言: 从2008开始,引入了一个增强非聚集索引的新功能——过滤索引(filter index),可以使用带有where条件的语句来创建非聚集索引,过滤掉不需要的数据,降低索引的维护开销和存储空间,提高查询性能。 准备工作:在AdventureWorks2012上,有一个Production.WorkOrder表,将使用这个表来做演示。 步骤:1、 创建一个非聚集索引在Produc翻译 2013-03-21 17:42:33 · 5145 阅读 · 0 评论 -
第十二章——SQLServer统计信息(1)——创建和更新统计信息
简介:查询的统计信息:目前为止,已经介绍了选择索引、维护索引。如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索引供查询之用,因为SQLServer优化器是基于开销的优化。当在where和on上的列上的数据需要显示在结果集的时候,如果有实时的统计信息,优化器会选择最好的执行方式,因为优化器会从统计信息中获得这些数据的明细情况。在创建索引的时候,SQLServer就会在索引列上创建统计信息翻译 2013-03-21 17:31:15 · 14462 阅读 · 0 评论 -
第十二章——SQLServer统计信息(2)——非索引键上统计信息的影响
前言: 索引对性能方面总是扮演着一个重要的角色,实际上,查询优化器首先检查谓词上的统计信息,然后才决定用什么索引。一般情况下,默认会在创建索引时,索引列上均创建统计信息。但是不代表在非索引键上的统计信息对性能没有用。 如果表上的所有列都有索引,那么将会是数据库负担不起,同时也不是一个好想法,包括谓词中用到的所有列加索引同样也不是好方法。因为索引会带来负载。因为需要空间存翻译 2013-03-21 17:36:51 · 5152 阅读 · 0 评论 -
第十二章——SQLServer统计信息(3)——发现过期统计信息并处理
前言: 统计信息是关于谓词中的数据分布的主要信息源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能统计需要返回的数据。 在创建列的统计信息后,在DML操作如insert、update、delete后,统计信息就会过时。因为这些操作更改了数据,影响了数据分布。此时需要更新统计信息。 在高活动的表中,统计信息可能几个小时就会过时。对于静态表,可翻译 2013-03-21 17:38:43 · 6131 阅读 · 0 评论 -
第十八章——基于策略的管理(1)——评估数据库属性
前言:本章包含:1、评估数据库属性2、限制数据库对象 介绍: 基于策略的管理(PBM)能帮助DBA管理一个或多个实例,并通过PBM管理数据库实体或其他SQLServer对象。PBM协助DBA应用或强制服务器对象和数据库按照策略来运作。下面的概念是需要牢记的:1、 策略:定义在PBM下的数据库或服务器对象的规则。2、 条件:条件是方面状态的布尔值。3、 方面:在PBM中,目标的行为模式翻译 2013-04-06 00:54:06 · 4755 阅读 · 0 评论 -
第十八章——基于策略的管理(2)——限制数据库对象
前言:在实际环境中,会有很多开发人员正在对一个项目编写SQL脚本,此时需要对对象的命名经行强制限定。完成这个任务可以使用强制的一些策略来实现。合理的命名对象并不仅仅是处于维护需要,有时候也能影响性能,限定数据库的命名对象将能避免一些性能问题。通常SP_是用于SQLServer系统存储过程,但是一些程序员会尝试将其作为自定义存储过程的命名。下面我们将演示如何使用策略,来限定SP_前缀,让其只属于SQ翻译 2013-04-06 01:02:04 · 5614 阅读 · 4 评论 -
第十九章——使用资源调控器管理资源(1)——使用SQLServer Management Studio 配置资源调控器
本系列包含:1、 使用SQLServer Management Studio 配置资源调控器2、 使用T-SQL配置资源调控器3、 监控资源调控器 前言: 在前面的章节,提到过可以通过多种配置数据库服务器的方式来提高性能。如索引、统计信息、hints、物理设计和服务器配置等。 当你完成上面那些配置后,还依旧有少量存储过程、查询运行得很慢时,由于硬件资源限制,可能已经没什么好调整翻译 2013-04-12 11:44:42 · 7455 阅读 · 0 评论 -
第十九章——使用资源调控器管理资源(3)——监控资源调控器
前言: 在对每个应用程序配置了资源调控器之后,需要监控资源调控器。可能需要监控资源池的使用和多少个请求被分配到特定的资源池。也可能希望监控internal和default池的活动情况。 本文中,演示使用不同登录账号(AW_WebAppUser和AW_ReportAppUser),并监控CPU和内存资源的使用情况。 准备工作:本文使用的部分脚本在本系列的第一篇中已经写出。这里不翻译 2013-04-12 11:50:26 · 4464 阅读 · 0 评论