开发人员须要具有的DBA技术

背景

在一些小公司或者部门里,一般不多有专门的DBA职位。这时候就须要咱们这些程序员充当业余DBA的做用,去监测和维护数据库性能。本文的目的是帮助非DBA专业的开发人员如何定位和解决平常出现数据库问题,并提供一些相关有用的工具。前端

大部分项目一开始的数据库都是很小的,但随着时间的推动,数据库变得愈来愈庞大,访问性能也愈来愈慢。所以优化数据库在所不免,数据库优化的三大核心:保持系统稳定、确保数据完整性和高质量、性能。程序员

了解你的数据库

在开始优化数据库的时候,咱们必需要了解本身所使用的数据库的结构和用途以及以下一些基本信息。sql

  1. 首先,平时要进行适度的备份和还原数据库,对备份的数据进行检测,能够在不影响当前数据库的状况下,进行一些输入性质的检测操做。
  2. 区分数据来源、哪张表拥有最多数据、运行速度。运行一些脚本去了解你的数据库。哪些表常常变化、哪些表须要建索引
  3. 找出表之间的关系依赖
  4. 找出数据是如何进来以及什么时候失效的
  5. 调查数据如何以及为何要进行状态的转换
  6. 作记录
  7. 使用内置的数据库报表

  

如何让你的数据库更健壮

当与数据交道时,健壮的代码相当重要。须要注意的是事务、error捕获和日志的使用。当设计数据库结构和架构时,都会面临存储过程的选择。存储过程是预先写好的数据库脚本,可以被命令取消。当使用C#或者JavaScript前端写代码时,容许某些地方使用错误的处理和日志记录哪些错误操做。但存储过程就不同了,由于相比于网站前端,它不多与用户有交互。在使用存储过程时,有三点须要留意:数据库

1. 若是容许,请把脚本写于事务块里面服务器

2. 使用try...catch...监测捕获错误信息多线程

3. 记录错误信息架构

当错误捕获后,须要记录,你可使用MS SQL内置的日志系统记录,但这又涉及到权限,可能你没有办法访问。你也能够建立一张日志表记录错误信息。工具

性能问题

一般咱们都会遇到访问速度的问题。速度慢无非就是数据量过大、处理脚本执行效率低、索引建立不合理、硬件或者系统配置等问题。索引是解决性能的优先选择,可是若是拥有太多的索引就会形成性能问题。其次是字段的类型,尽可能使用varchar替代nvarchar性能

使用索引

1. 正确使用索引大数据

2. 使用SQL 索引提示

 

其余性能问题

1. 非数据库引发的性能问题

通常状况下,更多形成性能问题的是咱们不规范和不合理的写法致使的。例如一下2个例子

用between语法比和比较来的快

经过foreach遍历循环查找单条数据,显然效率也会大打折扣。取而代之,可使用join表关联来查找你要的结果

2. 查询复杂来源的数据消耗太多时间

a. 前期预加载和规范

通常状况下,添加索引、优化查询语句到目前为止可以很好的优化性能。还有一种状况,因为访问数据量很大,且这些大数据是从其余数据量也很大的地方集合过来的,所以它消耗的时间就很长。最好的方式就是预先读取这些数据或者去规范化这些数据。若是你的查询来源是一个pivot表,那么他可能来自一系列的关联数据、视图、存储过程,好的解决方式就是建立一个新的存储过程去搜集这些须要的数据,而后把他们存入一个更规范的数据表中方便阅读和查询。先规范化你的数据,也可以帮你省去不少宝贵的实践,不只仅在加载数据前,也包括格式排版。好比你访问的数据须要整理成JSON格式的时候,你无需在访问的时候才作格式化操做,彻底能够预先加载这些数据整理成JSON格式。

b. 多线程执行存储过程

有时候一些存储过程确实须要花费一些时间去执行,而这些执行过程并非你所关心的。当你访问这些存储过程并等待时,就可能会面临超时的错误出现。解决方式,就是开始执行存储过程的时候,去检查他是否已经执行完毕而不是卡着线程等待它的结果。这些存储过程一般发生在一个脚本原本执行很快,但随着数据量的增长,他消耗的时间愈来愈久致使超时。你须要作的就是使用SqlCommand.BeginExecuteNonQuery()方法。这个方法在后台线程执行存储过程,而不影响你当前线程执行其余事情,无需等待。

 

如何导入数据

数据的导入也是开发人员须要具有的技能。MS SQL提供了内置的导入功能,能够经过text文件\数据库文件、csv或者xml。这里不作细聊

推荐经常使用的工具

1. DBCC

Database console commands 可以检查数据库级别或者表级别数据的完整性,重建索引的表,执行一系列的维护工做。

DBCC CheckDB: 检查数据库的逻辑和物理的完整性

DBCC CheckTable(‘TableName’) :检查表或者视图的结构完整性

DBCC ShrinkDatabase(‘DatabaseName’): 压缩数据库的物理大小

2. SP_WHO和SP_WHO2

有2个内置的系统存储过程比较有用。SP_WHO和SP_WHO2.这两个脚本能够提供当前sql链接的详细信息,包括链接该数据库的不一样应用、链接类型、进程锁定的详细信息。

exec sp_who2的用法

下面2张图能够清晰地看出谁链接了数据库、当前的活动和状态,BlkBy表明进程被谁锁定了

3. SQL Server Profiler的使用

Sql Server Profiler能够实时监测你的数据库,既能够跟踪执行过的语句,也能够查看EF/Linq的语法生成后的sql语句。

4. RedGate SQL Search

安装后sql会有提示功能,能够快速丁文你的数据库、表、触发器、存储过程、索引等。至关好用

5. Brent Ozar

包含一些脚本文件,能够检测数据库的性能、索引分析、计算出最影响查询性能的地方。它还包括一些有用的检查清单。

6. Server monitor

数据库服务器的监控,在发生问题时,会抢先一步客户经过邮件通知你。

绝大部分资料来源:http://www.codeproject.com/Articles/1060867/DBA-Skills-for-developers

相关文章
相关标签/搜索