当前位置: 首页 > wzjs >正文

韩国网站设计欣赏网站之家查询

韩国网站设计欣赏,网站之家查询,临沂市网站建设,网站退出率跟着热点整理一下遇到过的SQL Server的问题,这篇来聊聊读写分离遇到的和听说过的问题。 一、读写分离实现方法 1. 原生高可用方案 1.1 Always On 可用性组(推荐方案) 配置步骤: -- 1. 启用Always On功能 USE [master] GO ALT…

跟着热点整理一下遇到过的SQL Server的问题,这篇来聊聊读写分离遇到的和听说过的问题。

一、读写分离实现方法

1. 原生高可用方案

1.1 Always On 可用性组(推荐方案)

配置步骤

-- 1. 启用Always On功能
USE [master]
GO
ALTER SERVER CONFIGURATION SET HADR_CLUSTER_TYPE = WINDOWS;
GO
​
-- 2. 创建可用性组
CREATE AVAILABILITY GROUP [AG_ReadScale]
WITH (DB_FAILOVER = ON, CLUSTER_TYPE = WINDOWS)
FOR DATABASE [YourDB]
REPLICA ON 'PrimaryServer' WITH (ENDPOINT_URL = 'TCP://PrimaryServer:5022',AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,FAILOVER_MODE = AUTOMATIC,SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY)),'SecondaryServer' WITH (ENDPOINT_URL = 'TCP://SecondaryServer:5022',AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,FAILOVER_MODE = AUTOMATIC,SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY));

读写分离配置

-- 配置只读路由
ALTER AVAILABILITY GROUP [AG_ReadScale]
MODIFY REPLICA ON 'SecondaryServer' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST = ('SecondaryServer'))
);
​
-- 应用程序连接字符串示例
"Server=PrimaryServer;Database=YourDB;ApplicationIntent=ReadWrite;"
"Server=AG_Listener;Database=YourDB;ApplicationIntent=ReadOnly;"
1.2 日志传送(Legacy方案)

配置步骤

-- 主服务器配置
EXEC sp_add_log_shipping_primary_database@database = N'YourDB',@backup_directory = N'\\backup\share',@backup_job_name = N'LSBackup_YourDB';
​
-- 辅助服务器配置
EXEC sp_add_log_shipping_secondary_database@database = N'YourDB',@primary_server = N'PrimaryServer',@restore_job_name = N'LSRestore_YourDB';

2. 第三方中间件方案

2.1 使用ProxySQL

配置示例

# proxysql.cnf配置
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES
(10,'PrimaryServer',1433),  # 写组
(20,'SecondaryServer1',1433), # 读组
(20,'SecondaryServer2',1433); # 读组
​
# 读写分离规则
INSERT INTO mysql_query_rules (rule_id,active,match_pattern,destination_hostgroup,apply) VALUES
(1,1,'^SELECT.*FOR UPDATE',10,1),  # 写操作
(2,1,'^SELECT',20,1);              # 读操作
2.2 使用HAProxy

配置示例

# haproxy.cfg配置
frontend sql_frontbind *:1433mode tcpdefault_backend sql_write
​
backend sql_writemode tcpserver primary PrimaryServer:1433 check
​
backend sql_readmode tcpbalance roundrobinserver secondary1 SecondaryServer1:1433 checkserver secondary2 SecondaryServer2:1433 check
​
# 根据SQL注释路由
acl is_read sql_req -i -m beg "/*read*/"
use_backend sql_read if is_read

二、常见问题与解决方案

1. 数据同步延迟

问题现象

  • 读副本数据落后于主库

  • 报表查询结果不一致

解决方案

-- 1. 监控延迟
SELECT ag.name AS [AG Name],ar.replica_server_name,db_name(ds.database_id) AS [Database],ds.synchronization_state_desc,ds.log_send_queue_size,ds.redo_queue_size
FROM sys.dm_hadr_database_replica_states ds
JOIN sys.availability_replicas ar ON ds.replica_id = ar.replica_id
JOIN sys.availability_groups ag ON ar.group_id = ag.group_id;
​
-- 2. 优化方案
- 增加网络带宽(至少1Gbps)
- 调整同步提交模式为异步(对数据一致性要求不高的场景)
- 限制大事务(拆分超过100MB的事务)

2. 只读路由失效

问题现象

  • ApplicationIntent=ReadOnly的连接仍被路由到主节点

解决方案

-- 1. 检查只读路由配置
SELECT ag.name AS [AG Name],replica_server_name,read_only_routing_url
FROM sys.availability_replicas
WHERE read_only_routing_url IS NOT NULL;
​
-- 2. 修复配置
ALTER AVAILABILITY GROUP [AG_ReadScale]
MODIFY REPLICA ON 'SecondaryServer' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST = ('SecondaryServer'))
);
​
-- 3. 验证连接
-- 使用SSMS连接字符串:
"Server=AG_Listener;Database=YourDB;ApplicationIntent=ReadOnly;"

3. 临时表问题

问题现象

  • 使用临时表的查询在只读副本失败

  • 错误消息:"The database 'tempdb' is not accessible"

解决方案

-- 1. 应用层修改(推荐)
- 使用表变量替代临时表
- 或使用全局临时表(##temp)
​
-- 2. 数据库配置
-- 启用辅助副本的tempdb访问(SQL 2022新特性)
ALTER AVAILABILITY GROUP [AG_ReadScale]
MODIFY REPLICA ON 'SecondaryServer' WITH (SECONDARY_ROLE(ALLOW_TEMP_TABLES=ON));

4. 负载不均

问题现象

  • 读副本间负载不均衡

  • 单个副本CPU过高

解决方案

-- 1. 配置读权重(SQL 2022新特性)
ALTER AVAILABILITY GROUP [AG_ReadScale]
MODIFY REPLICA ON 'SecondaryServer1' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_WEIGHT=3)
);
ALTER AVAILABILITY GROUP [AG_ReadScale]
MODIFY REPLICA ON 'SecondaryServer2' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_WEIGHT=1)
);
​
-- 2. 使用中间件负载均衡
- 配置ProxySQL/HAProxy的加权轮询
- 基于副本性能指标动态调整权重

三、性能优化建议

1. 连接池配置

// ADO.NET连接池优化
"Server=AG_Listener;Database=YourDB;Max Pool Size=200;Min Pool Size=20;Connection Timeout=30;"

2. 查询提示

-- 强制读操作走副本
SELECT * FROM Orders WITH (READUNCOMMITTED)
OPTION (READONLY);
​
-- 强制写操作走主库(即使连接字符串标记为ReadOnly)
SELECT * FROM Orders OPTION (READCOMMITTEDLOCK);

3. 监控指标

-- 关键性能计数器
SELECT *
FROM sys.dm_os_performance_counters
WHERE counter_name IN ('Log Send Queue Size','Redo Queue Size','Transactions/sec','Lock Waits/sec'
);

四、SQL Server 2022 新特性利用

1. 内存优化TempDB元数据

-- 启用特性(减少TempDB争用)
ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED TEMPDB_METADATA = ON;

2. 智能查询处理

-- 启用智能查询处理
ALTER DATABASE SCOPED CONFIGURATION SET INTELLIGENT_QUERY_PROCESSING = ON;

3. 参数敏感计划优化

-- 避免参数嗅探问题
ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SENSITIVE_PLAN_OPTIMIZATION = ON;

这些事给予SQLServer 2022总结的,如果有版本问题,期待和各位大佬学习。

http://www.dtcms.com/wzjs/36796.html

相关文章:

  • 山东宏远建设有限公司网站百度网址导航主页
  • 网站做赌博词怎么推广广东病毒感染最新消息
  • 哈尔滨工程建设青岛网站seo公司
  • 成都网站建设小公司排名爱站网ip反查域名
  • 各种中药材初加工平台seo关键词排名优化的方法
  • 北京建网站多少钱58网络推广
  • wordpress调用插件抖音seo怎么收费
  • 自己做电视视频网站人工智能培训机构排名
  • 企业为什么需要网站西安市网站
  • 四川门户网站建设网址大全浏览器下载
  • 用数据库做学校网站论文seo一般包括哪些内容
  • 网站开发 源码云南seo网站关键词优化软件
  • 网站空间域名每年都得交吗如何写营销软文
  • 网站建设主要由哪几个部分组成万网官网
  • java怎么做视频网站搜索 引擎优化
  • 广东米可信息技术有限公司seo外包方法
  • 门户网站后台管理系统百度seo排名优化是什么
  • 赤峰建网站营销是做什么
  • 微友圈推广平台怎么加入拼多多seo 优化软件
  • 网站开发实习计划模板百度网站收录入口
  • 网站建设sem怎么做seo软件推荐
  • 用记事本做电影介绍的网站营销策略主要包括哪些
  • 网站做cdnseochinaz查询
  • 138ip地址查询网站百度游戏风云榜
  • 广州网站建设商城西安seo公司
  • 网站如何测试有无未做链接的文件百度搜索引擎技巧
  • 佛教网站建设_精品推荐黄色大气极乐古寺网站源码郑州网络推广哪个好
  • 建立公司官网多少钱简单网站建设优化推广
  • ipv6网站如何做百度seo排名优化
  • dw怎么做自我展示网站短视频关键词优化