金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 数据库 > Server事务复制搭建与同步经验,开发进阶篇系列

Server事务复制搭建与同步经验,开发进阶篇系列

发布时间:2019-11-06 06:54编辑:数据库浏览(71)

    0. 环境

    1. 无域环境
    2. 发布服务和分发服务器同一台主机
    角色 主机名 IP 发布名 发布库名/订阅库名
    发布服务器 Server1 192.168.1.100 test3 db1
    分发服务器(与发布服务器同一实例) Server1 192.168.1.100 - -
    订阅服务器 Client1 192.168.1.200 - db1

    一. 索引概述

      关于介绍索引,有一种“文章太守,挥毫万字,一饮千钟”的豪迈感觉,因为索引需要讲的知识点太多。在每个关系型数据库里都会作为重点介绍,因为索引关系着数据库的整体性能, 它在数据库性能优化里占有重要地位。由于索引关联面广,我想通过一系列来把索引尽量阐述清楚,大概包括索引存储单元、堆介绍、聚集索引与非聚集索引介绍、索引参数(填充因子,包含列,约束等)、索引的使用,索引维护管理,索引统计信息、索引访问方法、索引存储与文件组、索引视图、索引数据修改内部机制、索引的分析调优排查等。尽量争取把索引的知识点讲到讲明白,借鉴一些资料和经验,整理输出理论,实践列出案例。

      索引可以提供了对数据的快速访问。就像是一本书的目录,一个好的目录可以极大的减少查询时间,索引使数据以一种特定的方式组织起来,使查询操作具有最佳性能。当表变得越来越大,索引就变得十分明显,可以利用索引快速满足where条件的数据行。某些情况还可以利用索引帮助对数据进行排序,组合,分组,筛选。

      在sqlserver里索引类型包括:堆,聚集索引,非聚集索引,列存储索引,特殊索引(如全文索引),其它索引如分区索引,过滤索引等。

      1.  堆:堆不是索引,但讲索引时会讲到堆,两者有紧密联系,堆结构在数据插入,没有更改时是有存储顺序的,但一改动如修改删除,结构就会发生变化。没有聚集索引的表称为堆表。

      2. 聚集索引:对于聚集索引,数据实际上是按顺序存储的是B-Tree结构,B树是代表平衡的树,在寻找记录时都只需等量的资源,获取速度总是一致的,因为根索引到叶索引都具有相同的深度, 就像一本书把所有目录编排一样,一旦找到所要的数据,就完成了这次搜索,当查询使用到了索引时,sqlserver优化器可以快速定位,最少I/O次数获取所需的数据。

      3. 非聚集索引:非聚集索引也是B-Tree结构,在sql server 08可中多达999个。它是完全独立于数据本身结构的,也就是说它存储的是键值,有指针指向数据本身的位置。

      4. 列存储索引:它是sql server 2012开始引入的一种索引类型,,主要用于对大数据量的查询操作,与传统的索引行存储不同,通过列存储的压缩方式,在某些场景大大提高索引效率。

    1. 使用Symbolic Links分布I/O

    1. 修改host文件

    在发布服务器和订阅服务器都修改C:WindowsSystem32driversetc文件,加入IP和主机名。如果是请求订阅,则发布服务器不用修改也要可以;如果是推送请求,则必需设置。因为SQL Server复制不能通过IP进行相关的设置。

    二. 索引元数据   

      元数据是对应每个功能的一些描述与特性,这里的元数据是索引相关描述,后面查询分析还会使用到这些元数据,具体了解使用可以先查看msdn, 索引常用相关元数据如下:

      sys.indexes  它提供索引名,索引类型(堆或索引),聚集与非聚集类型,索引填充因子,索引过滤等信息。

      sys.index_columns 它提供了索引包含的列信息,可通过与sys.indexes关联获得索引列定义。

    SELECT i.name AS index_name  
        ,COL_NAME(ic.object_id,ic.column_id) AS column_name  
        ,ic.index_column_id  
        ,ic.key_ordinal  
    ,ic.is_included_column  
    FROM sys.indexes AS i  
    INNER JOIN sys.index_columns AS ic   
        ON i.object_id = ic.object_id AND i.index_id = ic.index_id  
    WHERE i.object_id = OBJECT_ID('表名xx');      
    

      如下图所示:图片 1

     

     sys.columns_store_dictionaries和sys.columns_store_segments:用于描述列存储信息。

     sys.xml_indexes:与sys.indexes类似 主要是用于xml索引。

     sys.spatial_indexes:也与sys.indexes类似 主要是用于spatial索引。

     sys.dm_db_index_physical_stats:它描述了索引的大小和碎片信息,代替了DBCC SHOWCONTIG。有三种获取统计信息扫描碎片模式:LIMITED,SAMPLED,DETAILED 这三种顺序描述需要的时间是越来越多。

     sys.dm_db_index_operational_stats:用来跟踪索引 I/O、 锁定、 闩锁、访问方法。索引访问方式(叶级插入累计数,叶级删除累计数,叶级更新累积数)。 索引或堆上闩锁争用次数时间,lock锁定数量时间,以及索引载入内存 I/O 数。

     sys.objects:用户自定义对象(如:表,视图..)的标识号,可以通过索引的objectid找到相关表名或视图名。

     sys.PARTITIONS:描述索引在每个分区中各对应一行,表和索引都至少包含一个分区(在表内部结构里,顶层是表,中间层是分区,分区下面再是数据和索引)。

     sys.dm_db_index_usage_stats:描述不同类型索引操作的计数(如:全表描述次数、走索引次数,书签查找次数等)以及对应各操作时间。每次查询索引,所进行的每个单独的搜索、扫描、查找或更新都被计为对该索引的一次使用,并使此视图中的相应计数器递增。

     sys.dm_db_missing_index_groups:索引组中包含的缺失索引信息。

     sys.dm_db_missing_index_details:描述有关缺失索引的详细信息。

     sys.dm_db_missing_index_group_stats:描述缺失索引组中包含的缺失索引。

      如下图是三个元数据组合,分析出缺失的索引

    SELECT  DB_NAME(database_id) AS database_name ,
            OBJECT_NAME(object_id, database_id) AS table_name ,
            mid.equality_columns ,
            mid.inequality_columns ,
            mid.included_columns ,
            ( migs.user_seeks + migs.user_scans ) * migs.avg_user_impact AS Impact ,
            migs.avg_total_user_cost * ( migs.avg_user_impact / 100.0 )
            * ( migs.user_seeks + migs.user_scans ) AS Score ,
            migs.user_seeks ,
            migs.user_scans
    FROM    sys.dm_db_missing_index_details mid
            INNER JOIN sys.dm_db_missing_index_groups mig ON mid.index_handle = mig.index_handle
            INNER JOIN sys.dm_db_missing_index_group_stats migs ON mig.index_group_handle = migs.group_handle
    ORDER BY migs.avg_total_user_cost * ( migs.avg_user_impact / 100.0 )
            * ( migs.user_seeks + migs.user_scans ) DESC
    

     sys.dm_db_missing_index_columns:缺少索引列的有关的信息。

             mysql的数据库名和表名是与文件系统的目录名和文件名对应的,默认情况下,创建的数据库和表都存放在参数datadir定义的目录下。如果不使用RAID或逻辑卷,所有的表都放在一个磁盘设置上,无法发挥多磁盘并行读写的优势。这种情况,我们可以利用操作系统的符号连接(Symbolic Links)将不同的数据库或表,索引指向不同的物理磁盘,从而达到分布磁盘I/O的目的。

    2. 创建快照文件夹及相应的用户和权限

    比如快照文件在发布服务器的D:ReplData下。在发布服务器和订阅服务器创建相同的Windows用户( 如果不想发布服务器创建新的Windows用户,则需要在发布服务器开启Guest用户),如repl_admin,并加入各自的administrator组中,并设置密码不能过期,不能修改密码。设置D:ReplData文件对于新建的用户repl_admin完全读写权限,并设置共享此文件夹。

    这里,可能会有疑问为什么repl_admin已经是administrator组的用户,对D:ReplData文件夹是读取权限的,为什么还要设置repl_admin完全读写权限?后来测试在生成快照文件时,无法在文件夹\Server1ReplData写入。后面第4步会提到\Server1ReplData这个文件夹。

    -- 查看文件路径
    SHOW GLOBAL VARIABLES LIKE "%datadir%";
    

    3. 设置SQL Server Agent的启动用户

    在发布服务器设置SQL Server Agent的启动用户为repl_admin(最好是在SQL Server Configuration Manager进行设置),并重启Agent。同样,在订阅服务器也做同样的步骤。注意,重启Agent可能会影响SQL Job的计划任务,生产环境上请检查重启带来的影响。

      图片 2

    4. 在发布服务器新建发布和分发

    在SSMS上,根据向导一步一步创建新的发布。如果没有分发服务器,在向导中,会进行创建。(分发的属性)设置快照文件为\Server1ReplData。最后可以生成创建发布的SQL脚本,可以保存起来,以后再重启创建,或是其他服务器需要创建发布,只需要修改一下脚本,再执行即可。

    为什么不直接设置D:ReplData?其实是可以的,但默认使用\Server1ReplData这个文件的话,在订阅端默认也是读取这个快照文件夹\Server1ReplData,这样比较方便。

    当然,可以手动再修改(可以单独修改发布的快照文件夹路径,也可以修改订阅时的快照文件夹路径),不过还是建议使用分发的设置的默认文件的网络路径格式。

    也可以使用FTP或其他方法把快照文件复制到订阅服务器做初始化即可。SQL Server复制也支持备份数据库的方式进行订阅的初始化。

    在第1步中,默认快照文件夹也是可以放到真正的网络盘上,而不是发布服务器上。考虑到直接写到网络盘,但需要考虑这可能会造成网络影响,如果在生成很大的快照过程中,造成网络阻塞,甚至中断,对生产造成影响。

    -- 查看mysql下文件目录
    [root@xuegod64 ~]# cd /var/lib/mysql
    

    5. 在订阅服务器新建订阅

    在SSMS上,根据向导一步一步创建新的订阅(以请求订阅pull subcription为例)。在Distribution Agent Security这一步,设置是这样的:

    • Run under the SQL Server Agent service account
    • Connect to the Distribution: Using the following SQL Server login
      这里使用了发布服务器的sa用户和密码。当然也可以另外创建专门的SQL Server复制账号来连接。
    • Connect to the Subscriber: By impersonating the process account

    如果是推送push subcription的话,第2,3个选项是相反的。即Using the following SQL Server login填写的是订阅服务器的SQL Server账号,让分发服务器有权限推送数据到订阅服务器。

      图片 3

    本文由金沙国际官网发布于数据库,转载请注明出处:Server事务复制搭建与同步经验,开发进阶篇系列

    关键词: