摘要:
一台服务器上所有数据库(也可能是部分数据库)的大小是我们经常需要了解的,它不仅能让我们知道目前数据库使用磁盘的比例,而且定期搜集这些信息,还能了解数据库一段时间的数据增量,更为常用的是在做数据迁移和升级时,方便规划新服务器磁盘容量。这里介绍三种统计数据库大小的方法:方法一:使用 sp_spaceuseddeclare @dbname varchar(100) declare db_cur cursor forselect name from sys.sysdatabases where dbid>4 and name<>'distribution'open d 阅读全文
摘要:
经常有开发同事反映如下情况:我有一条语句或者一个JOB昨天跑半个小时就完成了,今天怎么跑了两个小时还没有完成?是不是数据库出现问题了? 数据库语句运行时间异常,其实是一个比较复杂的情况,因为数据是不断变动的,今天好好的一条语句,有可能明天运行就不在预计的时间内了,这个场景是没办法完全重溯的,即便有当时的备份数据,但是当时的服务器压力是没有办法知道和营造的;但是好在现在不是要调查昨天语句跑时间异常的原因,而是要找到现在语句运行异常的原因,现在的情况还正在进行着呢,所以我们可以根据语句目前的情况,初步来排查一下; 其实要考虑的问题比较多: 1. 索引是否正常(索引是否损坏、有没有人删除索引等);. 阅读全文
摘要:
关于历史数据迁移这事,相信很多数据库管理员都经常要面对,因为应对的场景和数据量的不同,数据迁移方法和技术也五花八门;在一个数据量不大的表上迁移数据一般都不会有什么问题,一旦表的数据量增大,而且应用对这个表访问非常频繁时,那如何有效的迁移数据就会是一件很有讲究的事。迁移时先考虑以下几点要求:如何设计历史数据保存方法;如何将数据搬移到历史表中,如何将原表的数据删除;在线系统要求在数据搬移时,对系统影响很小;Job什么时间运行合适;数据量变大时,搬移时间是否足够;数据搬移,采用with(nolock)可能造成重复数据,使得搬移过程出错,如何处理比较好;第一:设计历史数据保持方法: 这个是个比较泛的. 阅读全文
摘要:
SQLServer 自带的TableDiff是用来比较表数据差异,并生产相应的脚本的工具,使用简单,还能生产差异脚本,是非常有用的东东,尤其是在做同步链数据修复时,是很理想的工具;但是,很多使用的过朋友都抱怨,TableDiff效率太差,上百万级别的数据表使用起来慢如蜗牛,有没有方法能加快TableDiff的效率呢? 其实TableDiff在很多时候效率还是不错的,和很多其他工具一样,要使它有好的效率,必须要懂得善用它,以下就来说明TableDiff效率差的原因,以及如何巧用TableDiff来提交效率; 1. 两个比较的表数据差异非常大: 这种情况效率差是肯定的,两个几百万的表,差异非常大. 阅读全文
摘要:
很少谈架构方面的事情,主要是因为这确实是个对知识面和知识深度要求很高的领域,无论是开发语言的选择、代码的架构,服务器的搭配、网络的架构、数据库的架构还是第三方软件的选用等,每一方面都是个很大的方向,每个方向都值得一个人去研究一辈子;每每看到某某网站的首席架构师之类的人(不过很多是海绵派),总觉得那就是乐于做技术的人的终极目标,总是有种崇拜感。 限于工作和知识的局限性,以及抱着对各位朋友负责的态度,本文谈论的架构仅限于数据库方面,而且是基于SQLserver数据库来谈的,以免误导各位。 SQLServer经过这些年的发展,其实已经有很多很好的技术可以使用,如Replication、SSB、Cl. 阅读全文
摘要:
很多开发人员都想成为一名DBA,也有很多人一开始就把自己定位成为一名DBA,DBA究竟需要掌握些什么知识和技能呢?以下是我做DBA工作和面试DBA时,整理的一些DBA方面的三十个问题,三十个大问题中还有许多小的问题,涵括了SQLServer DBA比较多的技术知识点,与大家分享下,希望给有志做DBA的朋友们一些帮助:1. char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;2. 系统DB有哪些,都有什么作用,需不需要做备份,为什么;损坏了如何做还原(主要是master. 阅读全文
摘要:
一. 背景:我们管理和维护的数据库系统基本都是7*24小时运转的,运转时会出现什么情况谁都无法估计,往往一个平时运行很正常的系统,某天晚上突然就抽风了,而此刻并没有系统负责人在旁边,当值班同事的电话打到正在酣睡的DBA手机上时,DBA不得不朦朦胧胧的,条件反射要上数据库看看;要在家里连到公司的内外一般都需要DBA通知运维人员(也可能是个在做梦的哥们)先给自己开个VPN(某些管控严格的公司还需要DBA打车去公司才能处理),然后通过一大堆的验证才通过慢如蜗牛(往往也和此刻的心态有关)的网络,远程连接到了公司内网出问题的数据库上,此刻DBA才开始真正开始排查起问题来;如果说等待DBA登录到问题数据库 阅读全文
摘要:
备份与还原是数据库避不开的主题,而作为DBA,经常会面临将一台机器上的所有数据库重新构建到一台新机器上的要求;在现在都讲究自动化管理的时代,传统的界面操作备份还原的做法不仅浪费时间和精力,而且还很容易出错,并且这次完成后,下次再有这样的要求,必须又重头开始(估计做5次就能做得人狂吐);于是,我们需要一套应对这种频繁操作、耗时、耗精力的通用处理方法,所以以下批处理脚本就诞生了。脚本主要的功能: 1. 备份一个服务器上的所有数据库(当然你也可以选择),备份文件按数据库名+日期生成,以.bak 结尾; 2. 将所有的备份文件还原到一台新机器上; 3. 验证磁盘和路径的正确性; 说明: 脚本合适 SQ 阅读全文
摘要:
一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。 特别对于UNION ALL比较有用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可。如果WITH AS短语所定义的表名被调用两次以上,则优化器会自动将WITH AS短语所获取的数据放入一个TEMP表里,如果只是被调用一 阅读全文
摘要:
前言: 在SQLServer数据库中,当我们对一个位于同步链上的表进行更新时,如果更新的记录数也非常多,几百或是几千万,那么批量更新该表会造成同步链的大量延时(甚至有可能崩溃掉,即使同步链不崩溃,等的人也要崩溃了)。原因: 一般情况下,Replication是根据我们更改的数据一条条更改记录的,也就是说我们在发布端下达如下的语句:update TestTb set TT='xxxx' where ustate=0如果这条更新语句,修改的数据量是一千万条的话,那Replication同步链需要传递一千万条如下的语句到订阅端去执行:exec [dbo].[sp_MSupd_dboT 阅读全文