教你管理SQL数据库系列(1-4)
原文
教你管理 SQL Server 数据库(1)数据库的结构 http://bbs.51cto.com/thread-1084951-1.html
教你管理 SQL Server 数据库(2)系统数据库和用户数据库 http://bbs.51cto.com/thread-1084955-1.html
教你管理 SQL Server 数据库(3)磁盘规划 http://bbs.51cto.com/thread-1085268-1.html
教你管理 SQL Server 数据库(4)文件组 http://bbs.51cto.com/thread-1085273-1.html
(1)数据库的结构
一、物理结构
数据库的物理结构是由一系列的文件组成。
文件主要为分2类:
1. 数据文件:MDF/NDF
数据文件负责数据库中的所有数据的持久性存储。
(1)主要的数据文件:MDF
每个数据库只能有一个MDF。在创建数据库的时候,就创建了一个默认的MDF文件。
(2)辅助的数据文件:NDF
每个数据库可以没有NDF,也可以有多个NDF。
2. 事务日志文件:LDF
事务日志文件负责存储针对一个数据库执行的所有事务处理。
-
二、数据库的逻辑结构
一个实例(instance)通常包含多个组件 http://bbs.51cto.com/thread-1074972-1.html ,数据库引擎(database engine)是其中一个组件。数据库(database)是数据库引擎的一个子集。
数据库引擎不仅包含若干个数据库,还包含安全凭据(安全性)、配置设置、Windows服务以及其它SQL Server对象(例如复制、备份设备、端点等)。对于Windows管理员来说,一个SQL Server实例中的数据库引擎组件就是一个服务(service)。对于某一个实例,可以有多个连接(connection),还可以分别连接到这个实例的某个组件(数据库引擎、分析服务、报表服务、集成服务等)。
必须首先连接(或者登录)到某个实例,才可以访问这个实例里面的数据库。
一共有6个系统数据库。
1. master
储存所有的实例层级的配置。实际上,master数据库的作用类似于实例(服务)的配置文件,在启动实例时就需要加载。如果master数据库损坏,将导致实例无法启动。
2. model
是一个模板。以后在这个实例中新建的数据库都是以model数据库作为模板。
3. msdb
存储了这个实例的维护操作(作业、警报、备份、恢复等)的所有配置和历史记录。
4. tempdb
用来保存临时或中间结果集的工作空间。每次启动实例时,都会重新创建tempdb数据库。停止实例时,将永久删除tempdb中的所有数据。
5. resource
这是SQL Server 2005或更高版本附带的数据库,包含所有的系统对象的副本。这个数据库是隐藏的,而且不可以备份。
6. distribution
将实例配置为复制分发服务器时,才存在distribution数据库。此数据库存储各种元数据、各种复制的历史记录数据以及用于事务复制的事务。
除了系统默认的6个数据库,用户也可以自己创建新的数据库。
所有的数据库(除了resource数据库)的列表都会显示在一个系统视图里。
select * from sys.databases
该数据库的默认位置为 C:\Program Files\Microsoft SQL Server\“实例ID”\MSSQL\Binn (注意:“实例ID”,例如MSSQL11.MSSQLSERVER)
在这个目录下,可以看到mssqlsystemresource.ldf 和 mssqlsystemresource.mdf
你先把实例停了,然后把这两个文件复制到另一个目录,然后启动实例,把你复制的2个文件“附加”为实例的另一个数据库(当然,数据库的名称不能为resource)。
官方的解释 http://technet.microsoft.com/zh-cn/library/ms190940.aspx
resource数据库是在SQL Server 2005才引入的,因此在SQL Server 2005及以后的版本中,安装Service Pack的速度明显比SQL Server 2000快。而且,一旦安装补丁失败,回滚到前一个版本的速度也很快。
这是因为,SQL Server 2005及以后的版本,可以直接用Resource数据库的副本覆盖旧的数据库。而SQL Server 2000需要运行很多脚本以删除旧的系统对象然后重建新的系统对象,需要的时间当然很长。
好比你想查查你家的汽车是否有违章记录,前提条件是你先得要有一辆车。如果你连车都没有,去哪里查违章记录?
磁盘I/O是影响数据库性能的最重要因素之一。其竞争来源主要有:
(1)Windows操作系统,主要是内存分页文件、Windows日志文件。
(2)数据库的数据文件(mdf和ndf)
(3)数据库的事务日志文件(ldf)
(4)SQL Server 实例的tempdb数据库
为了消除竞争对性能的影响,建议将上述文件分别放在不同的物理磁盘。
注意:物理磁盘与逻辑磁盘是不同的概念。例如,一台PC有3块SATA硬盘,每块硬盘都是独立的,那么可以看作为3个物理磁盘。如果将这3块磁盘做成RAID0,然后再分成3个逻辑分区(卷),那么它就是1个物理磁盘、3个逻辑磁盘。
(1)tempdb
tempdb 数据库性能要求非常高,但对数据安全性要求低。建议将 tempdb 数据库放置在快速磁盘系统中。如果有许多直接连接的磁盘,可以考虑使用RAID 0 。
(2)数据文件(mdf和ndf文件)
这类文件即要求性能,又要求安全性。建议RAID 10。如果硬件预算非常紧张,RAID 5也凑合吧。
(3)事务日志文件(ldf文件)
事务日志文件的特性是连续的顺序写入,因此对性能要求不高,仅要求安全性。建议RAID 1。
尽管对于当前的驱动器的大小而言,SQL Server 的磁盘空间需求是微不足道的,但是仍然需要考虑磁盘空间的规划。
(1)系统数据库
一般来说,系统数据库都不会很大,只有tempdb例外。如果T-SQL代码的质量不佳,tempdb增长到几百GB也是有可能的。
(2)用户数据库
应当估算用户数据库的容量增长,并规划足够的磁盘空间。
当磁盘已满导致数据库不能获得更多的磁盘空间,会报错“数据库已满”或“数据库日志已满”,数据库将拒绝写入。
如果用户的log每天都写入几十甚至几百GB,RAID10估计也撑不住。这个时候建议把数据库分拆到多台服务器上。
后来,挂的硬盘越来越多,就出现了卷(volume),例如“跨区卷”允许将多个硬盘做成一个逻辑硬盘,“带区卷”允许将2个硬盘做成“软RAID1”。。。
但是每一个RAID仍然只是一个逻辑硬盘,习惯上我们仍然还用分区的说法。Windows 7/2008的管理工具仍然还叫做DiskPart
在创建数据库时,默认使用“主文件组”。后陆创建数据文件时,都位于这个文件组内部。
多个数据文件起到负载均衡的作用。因此,尽量使每个数据文件的大小相同,这样可以优化比例填充的性能。
例如:某文件组有2个数据文件,当前的文件大小分别为4GB和6GB。现在批量导入10MB的数据,结果会按比例填充,使这2个数据文件分别增加4MB和6MB的数据。
注意:请将多个数据文件分别放置在不同的物理磁盘上。如果都放在同一个物理磁盘,由于数据需在多个文件中存取,导致磁头频繁寻道、定位,反而使性能降低。
注意:强烈建议不要使用多个日志文件。不仅不会提升性能,而且会导致恢复数据库时更加复杂。
二、文件组
每个数据库有一个“主文件组”。 此文件组包含主要数据文件和未放入其他文件组的所有次要文件。 可以创建用户定义的文件组,用于将数据文件集合起来,以便于管理、数据分配和放置。
如果创建了多个文件组,那么在创建新的数据文件(ndf)时,可以指定文件组。
如果在数据库中创建对象时没有指定对象所属的文件组,对象将被分配给默认文件组。 不管何时,只能将一个文件组指定为默认文件组。 默认文件组中的文件必须足够大,能够容纳未分配给其他文件组的所有新对象。
PRIMARY 文件组是默认文件组,除非使用 ALTER DATABASE 语句进行了更改。
(1)SSMS
(2)T-SQL
ALTER DATABASE [db02] MODIFY FILEGROUP [FG1] DEFAULT
四、将对象创建到指定的文件组
CREATE TABLE [dbo].[EmpTable]( [EmpID] [varchar](10) NULL,[DepID] [nvarchar](10) NULL,[Title] [nvarchar](10) NULL
) ON [PRIMARY]
注意:系统对象和表仍然分配给 PRIMARY 文件组,而不是其它的文件组。
问:SQL文件组就是文件的逻辑集合。它的目的是为了方便数据的管理和分配.文件组可以把指定是文件组合在一起。
我创建文件组时,它提示这个!新建文件组必须得有东西?
答:新建的文件组可以暂时不包含数据文件(ndf),但是在以下情况下必须先为这个文件组至少创建一个数据文件:
1. 将这个文件组设置为默认文件组;
2. 往这个文件组写入数据
教你管理SQL数据库系列(1-4)的更多相关文章
- 教你管理SQL实例系列(1-15)
全系列转自:51CTO ->jimshu http://jimshu.blog.51cto.com 目录及原本连接如下: 教你管理SQL实例(1)数据库实例 教你管理SQL实例(2)服务启动帐户 ...
- 教你管理SQL备份与恢复系列(1-20)
原链接:https://bbs.51cto.com/thread-1147908-1.html 教你备份与恢复数据库,直接下面下文档吧. 教你备份与恢复数据库(1)事务 http://bbs.51ct ...
- 教你使用SQL数据库复制系列(1-7)
SQL Server 复制系列(文章索引) 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 前言(Introduction) 复制逻辑结构图(Construction) ...
- 教你建立SQL数据库的表分区
1)新建一个数据库 2)添加几个文件组 3)回到“常规”选项卡,添加数据库文件 看到用红色框框起来的地方没?上一步中建立的文件组在这里就用上了.再看后面的路径,我把每一个文件都单独放在不同的磁盘上,而 ...
- 教你使用SQL数据库索引(1-15)
原文地址:http://www.sqlservercentral.com/stairway/72399/ 中文地址:https://www.cnblogs.com/tjy9999/category/4 ...
- 保姆级教程!手把手教你使用Longhorn管理云原生分布式SQL数据库!
作者简介 Jimmy Guerrero,在开发者关系团队和开源社区拥有20多年的经验.他目前领导YugabyteDB的社区和市场团队. 本文来自Rancher Labs Longhorn是Kubern ...
- 存储过程系列之存储过程sql数据库调用和程序代码调用
1.存储过程,无参数的存储过程 创建无参数存储存储过程 Create Procedure DCEMREMR_TEMPLATEAs SELECT TOP 10 [FILENAME],[FILETITLE ...
- MS SQL巡检系列——检查重复索引
前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...
- Oracle DBA管理包脚本系列(二)
该系列脚本结合日常工作,方便DBA做数据管理.迁移.同步等功能,以下为该系列的脚本,按照功能划分不同的包.功能有如下: 1)数据库对象管理(添加.修改.删除.禁用/启用.编译.去重复.闪回.文件读写. ...
随机推荐
- 【Scala-ML】怎样利用Scala构建并行机器学习系统
引言 在学习Scala的过程中,我发现其在构建大规模分布式计算系统上有与生俱来的特质. 其丰富的类型系统能够帮助编程设计提供非常好的信息隐藏和抽象,其monoids和monads概念利用Scala高阶 ...
- 用typeof查看数据类型&&用parseInt解析数字,并求和
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- vector list map 遍历删除指定元素
#include <stdio.h> #include <stdint.h> #include <vector> #include <list> #in ...
- php正则表达式基本
一.正则表达式的组成 1.分隔符,可以是除了字母,数字,反斜线及空白以外的任何字符,比如/,!,#,%,|,~等;通常有/,!,~ 2.表达式:由一些特殊字符和非特殊字符组成. 3.修饰符:用于开启或 ...
- react-native 启动页(react-native-splash-screen)
用于解决iOS和Android启动白屏问题及简单的启动页面展示 下载 react-native-splash-screen yarn add react-native-splash-screen re ...
- URAL 1984. Dummy Guy(数学啊)
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1984 1984. Dummy Guy Time limit: 0.5 second Me ...
- 无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的问题
原因: 没有引用EntityFramework命令 解决: 在程序包管理器控制台执行如下命令:Import-Module 项目路径\packages\EntityFramework.6.1.3(EF版 ...
- 【SpringMVC学习09】SpringMVC与前台的json数据交互
json数据格式在接口调用中.html页面中比较常用,json格式比较简单,解析也比较方便,所以使用很普遍.在springmvc中,也支持对json数据的解析和转换,这篇文章主要总结一下springm ...
- HTTP协议断点续传
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;usi ...
- Delphi 泛型(三十篇)
Delphi 泛型(三十篇)http://www.cnblogs.com/jxgxy/category/216671.html