07-SQLServer的系统数据库

总结

首先要明确SQLServer的系统数据库一共有5个:Master、Model、Msdb、Tempdb、Resource。

1、Master数据库

  (1)master数据库记录了所有系统级别的信息,包括元数据(登录账户)、端点、链接服务器和系统的配置设置。需要注意的是系统对象不在master库中,而在resource库中;

  (2)mater数据库还记录了所有其他数据库的存在、数据库的文件的位置;

  (3)master数据库不可用,则SQLServer实例就无法启动;

  (4)不能给master数据库添加文件或文件组,不能更改master数据库的排序规则,默认是实例的排序规则;

  (5)不能删除master数据库,不能删除guest用户;

  (6)不能创建触发器,不能启动CDC(数据变更捕获),不能参与数据库镜像,不能设置为只读,不能设置为OFFLINE(脱机);

2、Model数据库

  (1)model数据库是一个模板数据库,在create database时,将通过复制model数据库中的内容来创建数据库的第一部分,然后用空页填充新数据库的剩余部分;

  (2)model数据库必须存在,model数据库的全部内容都会被复制到新数据库中,例如设置的权限、数据库选项、表、函数、存储过程等等;

  (3)model数据库的数据和日志文件默认初始大小为8MB;

  (4)每次系统重启创建的tempdb数据库的模板都来自于model;

3、Msdb数据库

  (1)msdb用来保存SQLServer代理作业和执行计划的配置信息;

  (2)默认情况下msdb使用简单模式;

4、Tempdb数据库

  (1)tempdb数据库保存系统运行过程中产生的临时表、存储过程、全局或局部临时表及索引、表变量等等;

  (2)tempdb数据库是一个全局资源,任何连接到系统的用户都可以在该数据库中产生临时表和存储过程;

  (3)每次重启SQLServer的时候。都会清空该数据库中的内容,所以每次系统重启后,tempdb总是一个干净的数据库副本(模板来自model数据库);

  (4)tempdb中的操作是最小日志记录操作,以便回滚事务;

  (5)不允许对tempdb数据库做备份还原操作;

  (6)tempdb数据库的大小和物理位置可能影响系统的性能。例如定义的tempdb大小过小,那么每次重启SQLServer实例时,都可能会占用部分系统处理负载,让tempdb自动增长到工作所需的大小(如果正常工作需要的tempdb的大小比较大的话);

  (7)每个文件组中的数据文件大小应一致,SQLServer可以使用比例填充算法增加可用空间,进行文件分配,将tempdb将分割成大小相等的多个数据文件,这样可以为使用tempdb的操作提供更高的并行效率;

  (8)SQLServer2016开始,对tempdb的性能进行了优化,具体如下:

    * 临时表和表变量可以缓存。缓存允许删除和创建临时对象的操作非常快速的执行,减少了物理上页分配的争用问题;

    * 改进了分配页闩锁协议,减少了所用UP(更新)闩锁的数量;

    * 减少了tempdb的日志记录开销,从而减少了tempdb日志文件的磁盘I/O带宽消耗;

    * 新安装的SQL实例,tempdb会添加多个tempdb数据文件;

  (9)查看当前tempdb的大小和增长参数

    命令:SELECT name AS FileName,size*1.0/128 AS FileSizeInMB,

        CASE max_size
          WHEN 0 THEN 'Autogrowth is off.'
          WHEN -1 THEN 'Autogrowth is on.'
          ELSE 'Log file grows to a maximum size of 2 TB.'
        END,
        growth AS 'GrowthValue',
        'GrowthIncrement' =
          CASE
            WHEN growth = 0 THEN 'Size is fixed.'
            WHEN growth > 0 AND is_percent_growth = 0
              THEN 'Growth value is in 8-KB pages.'
            ELSE 'Growth value is a percentage.'
          END
        FROM tempdb.sys.database_files;
        GO

      

  (10)验证tempdb是否经过了内存优化(内存优化表)

    命令: SELECT SERVERPROPERTY('IsTempdbMetadataMemoryOptimized')

    

 5、Resource数据库

  (1)Resource数据库是一个只读的数据库,里面包含了SQLServer中所有的系统对象,默认是隐藏的,在SSMS里看不到这个数据库;
  (2)Resource数据库数据文件和日志文件的存储路径为C:Program FilesMicrosoft SQL ServerMSSQL12.MSSQLSERVERMSSQLBinn下,文件名叫mssqlsystemresource.mdf和mssqlsystemresource.ldf,位置不应该移动;

  

  (3)SQLServer系统对象在物理上上存储在Resourece数据库中,但在逻辑上却显示在每个数据库的sys架构中。Resource数据库不包含用户数据和用户元数据;
  (4)每个SQLServer实例都有且只有一个关联的mssqlsystemresource.mdf文件,多个实例间不能共享此文件;
  (5)SQLServer不能备份Resource备份;
  (6)Resource数据库的ID始终是32767,与Resource数据库关联的其他重要值是版本号和数据库上次更新的时间;  

  (7)查看resource数据库的版本号

    命令:select serverproperty('resourceVersion')

    

   (8)查看resource数据库上次升级的时间

    命令:select serverproperty('ResourceLastUpdateDateTime')

    

   (9)查看系统对象(sys.objects)的定义

    命令:select object_definition(object_id('sys.objects'))

    

原文地址:https://www.cnblogs.com/jialanyu/p/11571112.html