• SQL_数据库_性能优化(读写分离,分库分表,负载均衡)


    读写分离:主库负责增删改查,从库负责查询,

      需要注意的是,从库任何增删改不会影响到主库  

    事务复制:

    准备工作:

    l 环境:Microsoft SQL Server 2014版本

    开启服务:Sql Server服务、SqlServer代理服务

    数据库:生成数据库服务器,数据库:RuanmouData

    l 如果需要跨服务器复制:需要指定服务器之间在同一个域中

    l 设置数据库连接地址为服务器名称

    配置步骤:

    1、 设置共享文件夹(如果是多服务器,需要设置共享在主数据库服务器上)

    2、在 SQL Server Management Studio中连接到发布服务器,然后展开服务器节点。

    3、右键单击“复制” 文件夹,然后单击“配置分发” 

     

    4、上分发服务器上页上,选择 ' <服务器名 > ' 将充当自己的分发服务器;SQL Server 将创建分发数据库和日志,然后单击下一步。

    5、如果 SQL Server 未运行,则在 SQL Server“代理启动” 页上,选择“是” SQL Server,将 代理服务配置为自动启动。 单击“下一步” 。

    6、在“快照文件夹” 文本框中,输入 “共享文件夹的名称”,然后单击“下一步” 。接受向导剩余页上的默认值。

     

    7、单击“完成” 以启用分发。

    发布:

    1、在 SQL Server Management Studio中连接到发布服务器,然后展开服务器节点。展开“复制”文件夹,右键单击“本地发布”文件夹,再单击“新建发布”。

    2、在“发布数据库”页上,选择需要发布的数据库,然后单击“下一步” 。

    3、在“发布类型”页上,选择“事务发布” ,然后单击“下一步” 。

    4、选择需要发布的对象。

    5、设置代理安全性,选择默认账号。

    6、可以查看快照的状态。

    创建订阅

    1、在 SQL Server Management Studio 中连接到发布服务器,然后依次展开服务器节点和“复制” 文件夹,在“本地本地” 文件夹中,然后单击“新建订阅”新建订阅向导将启动。

    2、在“发布”页上,选择  上面数据库的发布,然后单击“下一步” 。

    3、在“分发代理位置”页上,选择“在分发服务器上运行所有代理” ,然后单击“下一步” 。

    4、在“订阅服务器”页上,如果未显示订阅服务器实例名称,请单击“添加订阅服务器” ,然后单击“添加 SQL Server 订阅服务器” ,在“连接到服务器” 对话框中输入订阅服务器实例名称,然后单击“连接” 。

    5、在中分发代理安全性对话框框中,单击省略号 ( ... ) 按钮,设置账户,单击确定,然后单击下一步。单击“完成” 以接受其余页中的默认值并完成向导。

    注:

    如果再新增复制分发的时候,提示数据库服务器名称问题:按照一下步骤操作

    use master
    go
    
    select @@servername;
    select serverproperty('servername')
    检查名称--改名字就会失败
    sp_dropserver 'old_server_name' 
     sp_addserver 'current_computer_name','local'
    然后在SQL Server配置管理器  重启Sql服务
    
     

    注:如果出现发布的状态提示代理服务器无法访问路径(路径拒绝访问),可以按照一下方式解决:

    第一步:

    第二步:

    第三步:

     负载均衡


      做好了读写分离之后,我们可以在c#代码中配置访问策略(写一个简单平均访问算法就OK),来平均访问从库

      

    分库分表

      数据库分库之垂直切分

        比如一个电商平台里面 所有订单/物流/财务/仓储都在一个数据库 此时可以每个系统一个数据库服务器

      数据库分库之水平切分

        如果一个表存储数据很多,导致数据库性能问题,可以水平分库,数据库结构完全一致,只是存储数据不一样(可以通过时间/区域)来执行分库策略

     一定要注意的是:分库的一定要符合实际需求进行拆分,否则会造成比没分更严重的后果

       垂直分表:某些字段的数据不常用,但是又包含在这张表中,而且这些字段很损耗性能;就可以进行垂直切分,两个表可以直接通过两个主键关联(建议使用Guid作为主键);也可以通过主外键关系来关联!

      水平分表:

    例子:银行账单表 如果要进行分表的话,就是使用时间来进行策略划分,因为一般就是查询近一个月或者半年之内的

        外卖系统:通过区域来分表

  • 相关阅读:
    《牛客IOI周赛17提高组A》
    《Codeforces Round #645 (Div. 2)》
    《AtCoder Beginner Contest 168 E》思路详解
    《东华大学2020年程序设计竞赛题解》
    《牛客直播课习题1》
    《Codeforces Round #643 (Div. 2)》
    《TOJ5945》区间覆盖问题。
    解决方案、项目、程序集、命名空间
    SQL存储过程前面后面的几句代码是什么意思?
    无法将类型为“IList”的对象强制转换为类型“System.Data.DataRowView” 。的解决方法
  • 原文地址:https://www.cnblogs.com/LZXX/p/13044841.html
Copyright © 2020-2023  润新知