SQL Server 瓶颈本质归为硬件资源、引擎内部、SQL 与对象设计、配置、并发事务、外部依赖六大类,每一类包含现象、底层诱因、典型等待类型、定位手段、处置方案 SQL Server 整体分为三层:OS 硬件资源层 → SQL Server 引擎层(Relational Engine 关系引擎 + Storage Engine 存储引擎)→ 业务 SQL 执行层
主流国产数据库梳理
说明:修正部分名称、归属与定位,补充核心架构、技术路线、典型场景,区分 OLTP/OLAP/HTAP,便于对标 SQL Server、Oracle。
一、主流商用国产关系型数据库
- OceanBase(蚂蚁集团,原阿里)
- 架构:分布式 Shared‑Nothing,原生分布式,强一致多副本;HTAP 混合负载。
- 内核来源:完全自研,非基于 MySQL 二次开发;兼容 MySQL、Oracle 语法。
- 核心能力:分布式事务、水平在线扩容、两地三中心、高可用;支持金融级 ACID。
- 典型场景:金融核心、交易系统、运营商、政务、替换 Oracle。
- 特点:从支付宝业务演进而来,支撑大并发交易,也支持分析查询。
- GaussDB(华为)
- 产品线分两大分支:
- GaussDB (for openGauss):单机 / 主备、分布式,基于 openGauss 开源内核;兼容 PostgreSQL,部分兼容 Oracle。
- GaussDB 分布式版:面向海量业务,支持 HTAP。
- 开源:openGauss 为开源社区版,商业版 GaussDB 在此之上增强。
- 场景:政企、金融、运营商、政企替换 Oracle/DB2;支持本地部署 + 云。
- TD‑SQL(腾讯,你写的 HYPER 为别名 / 内部代号,对外产品名 TD‑SQL)
HYPER 是内部 HTAP 代号,对外正式产品名称为 TD‑SQL
- 架构:分布式,有 MySQL 分支、自研内核 TD‑SQL‑C(HTAP)。
- TD‑SQL‑C:HTAP 架构,一套库同时处理交易 + 分析;兼容 MySQL。
- 场景:金融、互联网交易、政务、计费系统。
- GBase(南大通用,不是国光集团)
名称纠正:南大通用 GBase,并非国光集团。
- 主要产品线:
- GBase 8s:集中式,兼容 Informix,面向交易型 OLTP,金融行业大量落地。
- GBase 8a MPP:MPP 大规模并行分析数据库,OLAP 数仓。
- GBase 8c:分布式多模数据库。
- 场景:金融、运营商、政务,交易、数仓均有大规模落地。
- X‑DB(中科院计算所)
- 定位:分布式关系数据库,自研内核;支持分布式事务、多副本容灾。
- 特点:科研院所背景,偏向国产化替代、信创场景;侧重高可靠分布式 OLTP。
二、补充其他重要国产数据库(信创主流)
- 达梦数据库 DM8(武汉达梦)
- 集中式为主,也支持分布式集群;高度兼容 Oracle 语法。
- 国内信创装机量很高,政务、国企、金融,Oracle 替换主力。
- 人大金仓 KingbaseES(北京人大金仓)
- 基于 PostgreSQL 演进,兼容 Oracle;单机、主备、集群。
- 信创基础软硬件生态适配完善,党政、国企广泛使用。
- SequoiaDB 巨杉数据库
- 多模分布式数据库,支持关系、文档、对象;HTAP,面向海量数据,多用于数仓、跨业务数据汇聚。
- PingCAP TiDB(平凯星辰)
- 开源分布式 HTAP 数据库,兼容 MySQL;国内互联网、政企广泛使用,社区生态强大。
三、技术路线分类
表格
| 类别 | 代表产品 | 说明 |
|---|---|---|
| 完全自研内核分布式 | OceanBase、X‑DB | 从零自研存储、事务、分布式调度 |
| 基于 PostgreSQL 演进 | openGauss/GaussDB、人大金仓 KingbaseES | PG 内核基础上做国产化增强 |
| 基于 MySQL 演进 / 分布式中间件 | TD‑SQL、TiDB | 兼容 MySQL 生态,分布式改造 |
| 继承国外商业内核演进 | GBase8s(Informix)、达梦 DM8(借鉴 Oracle) | 兼容原有商业数据库语法,利于迁移 |
| MPP 分析型 | GBase8a、GaussDWH | 面向数仓、OLAP 海量分析 |
四、对标参考(和 MS SQL Server 对比)
- SQL Server:集中式为主,依靠向上堆硬件提升性能;依靠 AlwaysOn 做高可用;没有原生分布式分片能力。
- 多数国产数据库主打原生分布式,可以水平横向扩容;但带来网络开销、分布式事务开销、运维复杂度上升。
- SQL Server 优势:完整生态 SSMS、SSIS、SSAS、查询存储、强大 DMV 监控、完善的备份维护工具链;国产数据库大多在运维工具、诊断 DMV、性能调优工具链仍在追赶。
- 信创场景:国产数据库深度适配 ARM、飞腾、鲲鹏、统信、麒麟;SQL Server 在国产 CPU、国产操作系统支持有限。
五、国产数据库共性瓶颈(类比前面 SQL Server 的瓶颈拆解思路)
- 分布式事务瓶颈:跨分片事务,两阶段提交带来延迟,相比单机数据库开销显著上升。
- 分片热点瓶颈:分片键设计不合理,出现热点分片,整体集群被单分片拖垮。
- 网络瓶颈放大:分布式架构下,节点间数据交互多,网络抖动直接影响整体性能。
- 统计信息、执行计划优化器成熟度:复杂多表关联、子查询场景,优化器容易生成差的执行计划。
- 运维复杂度上升:节点多,备份、故障切换、扩容、监控告警的运维成本远高于单机 SQL Server。
- 生态工具短板:第三方迁移工具、诊断脚本、调优知识库不如 SQL Server/Oracle 丰富。
MS SQL Server 性能瓶颈完整拆解|底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化流水线
基于上面 1‑54 项瓶颈,做体系化解构;覆盖单机、局域网、外网云、复合型部署场景。
一、底层原理
SQL Server 整体分为三层:OS 硬件资源层 → SQL Server 引擎层(Relational Engine 关系引擎 + Storage Engine 存储引擎)→ 业务 SQL 执行层。
- 关系引擎 Relational Engine:解析 T‑SQL、生成执行计划、查询优化、事务管理、锁管理器、并行查询调度。
- 存储引擎 Storage Engine:Buffer Pool 缓冲池、日志管理器、访问数据页、索引管理、TempDB、IO 请求下发到操作系统。
- 所有瓶颈本质是五类资源竞争:CPU、内存 Buffer Pool、磁盘 IO、锁 / 事务并发、网络;以及上层逻辑缺陷:差的 SQL、坏的执行计划、不合理设计、配置错误。
核心运行机制:
- 数据优先读取到 Buffer Pool 内存池;命中内存直接返回;未命中下发磁盘 IO。
- 事务写入先写日志(WAL 预写日志),日志顺序写;数据页异步刷盘。
- TempDB 承担排序、哈希、临时表、行版本存储,是全局共享资源。
- 查询优化器基于统计信息生成执行计划;统计信息失真会产出错误计划。
- 锁管理器维护行‑页‑表锁;事务持有锁时间越长,并发冲突越高。
二、依赖文件
| 文件 / 组件 | 路径 | 作用 | 瓶颈关联点 |
|---|---|---|---|
sqlservr.exe |
C:\Program Files\Microsoft SQL Server\MSSQLxx.MSSQLSERVER\MSSQL\Binn |
SQL Server 主服务进程 | CPU、线程调度、内存申请入口 |
sqlos.dll |
Binn | SQLOS 内部操作系统层,调度 Worker 线程、内存资源、IO 调度 | Worker 线程耗尽、SOS 内存分配 |
msdb.mdf/msdb.ldf |
MSSQL\DATA | 系统库:Agent 作业、备份历史、维护计划 | 备份、作业任务带来 IO 压力 |
tempdb.mdf / tempdb.ldf |
MSSQL\DATA | 全局临时库 | TempDB 竞争、PFS/GAM/SGAM 页闩锁瓶颈 |
master.mdf/master.ldf |
MSSQL\DATA | 系统元数据库 | 元数据查询压力 |
用户库.mdf/.ndf |
DATA | 数据文件(数据页、索引页) | 读 IO、碎片化 |
用户库.ldf |
DATA | 事务日志文件,WAL 顺序写入 | 日志写瓶颈、VLF 碎片化 |
sqlagent.exe |
Binn | SQL Server 代理,执行作业、维护计划 | 定时任务带来突发 CPU/IO 压力 |
ExtendedEvents xel日志 |
Log 目录 | 扩展事件跟踪文件 | 性能诊断采集 |
| Windows 底层 | |||
ntoskrnl.exe |
System32 | Windows 内核,内存管理、线程调度 | OS 内存挤压 SQL Server |
tcpip.sys ndis.sys |
drivers | TCP 网络栈 | 网络瓶颈 |
disk.sys storport.sys |
drivers | 磁盘 IO 栈 | 磁盘 IO 瓶颈 |
schannel.dll |
System32 | TLS 加密,远程连接加密 | 加密 CPU 开销 |
三、依赖关系
3.1 内部依赖
- Buffer Pool(缓冲池)强依赖 OS 可用内存;
max server memory限制 sqlservr.exe 最大内存;内存不足会大量触发物理磁盘 IO。 - 查询优化器强依赖统计信息;统计信息过期 / 缺失,生成错误执行计划,引发 CPU 高、全表扫描。
- 所有会话的排序、哈希聚合、临时表全部依赖 TempDB;TempDB 文件配置不合理会出现闩锁等待,整体业务卡顿。
- 事务强依赖事务日志;所有 DML 先写 ldf 日志;日志磁盘慢直接压垮写入吞吐量。
- Worker 线程池(SQLOS):并发连接过多、长查询占用 worker,出现 THREADPOOL 等待,新请求排队。
3.2 外部依赖
- OS 硬件:CPU 核心、内存大小、磁盘 IOPS / 吞吐量、网卡带宽延迟。
- Windows 系统组件:磁盘栈、TCP/IP 协议栈、系统内存管理。
- 外部依赖:应用连接池、LinkedServer 外部库、备份介质、AlwaysOn 可用性组链路、第三方 ETL 集成服务。
✅硬性依赖
- 磁盘:数据文件、日志、TempDB 必须稳定 IO;日志需要高顺序写性能;数据文件需要随机读写性能。
- 内存:Buffer Pool 大小决定缓存命中率;内存过小 IO 暴涨。
- 网络:客户端、应用、AlwaysOn 同步链路、LinkedServer 依赖网络质量。
❌失效边界(坑点)
- SQL Server 内存不限制 max server memory,会吃光整机内存,挤压操作系统,导致 OS 分页,整机性能暴跌。
- TempDB 仅 1 个数据文件,高并发下 PFS 页闩锁(PAGEIOLATCH_SH、PAGELATCH_UP)严重。
- 事务日志 VLF 过多,日志回滚、备份、恢复变慢。
- 统计信息长期不更新,查询优化器生成错误执行计划。
- 长事务不提交,锁长期持有,锁阻塞、死锁、版本存储暴涨。
- 备份、索引重建大作业在业务高峰执行,抢占 CPU/IO 资源。
- 多实例虚拟化环境,CPU 内存磁盘资源争抢,资源被宿主机抢占。
- 网络链路抖动,AlwaysOn 同步延迟、LinkedServer 查询卡顿。
四、逻辑链路(完整执行流水线)
应用客户端 → T‑SQL语句提交(TCP/TDS协议)
↓
SQL Server接收会话,分配Worker工作线程
↓
关系引擎:解析SQL → 查询优化器读取统计信息 → 生成执行计划
↓
计划缓存命中?
├─是:复用缓存的执行计划
└─否:编译生成新执行计划存入计划缓存
↓
按照执行计划下发请求到存储引擎
↓
存储引擎:请求访问数据页
├─数据页在Buffer Pool内存 → 内存读取返回
└─不在Buffer Pool → 下发异步IO到磁盘,等待IO完成,载入Buffer Pool
↓
DML写入:先写入事务日志缓冲区,刷入ldf日志文件(WAL预写日志);数据页延迟刷盘
↓
排序/哈希/临时对象 → 内存不足则溢出写入TempDB
↓
锁管理器申请行/页/表锁;事务持有锁直到commit/rollback
↓
结果集通过TDS返回客户端
瓶颈发生位置对应:
- CPU 瓶颈:SQL 解析、编译、查询计算、排序聚合、并行查询、大量逻辑读。
- 内存瓶颈:Buffer Pool 不足,缓存命中率低,大量物理 IO;Worker 线程不足。
- IO 瓶颈:磁盘读写慢,PAGEIOLATCH_* 等待。
- 并发锁瓶颈:LCK_M_* 等待、死锁,事务持有锁时间过长。
- TempDB 瓶颈:PAGELATCH 闩锁、IO 等待,排序溢出。
- 网络瓶颈:TDS 大数据集传输、链路延迟。
- 计划缓存问题:参数嗅探,错误执行计划复用。
五、配套链
🔹配套工具链
| 分类 | 工具 | 作用 |
|---|---|---|
| DMV 动态管理视图 | sys.dm_os_wait_stats、sys.dm_exec_query_stats、sys.dm_io_virtual_file_stats | 定位等待、高消耗 SQL、磁盘 IO 统计 |
| Query Store 查询存储 | SSMS 内置 | 捕获慢查询,强制执行计划,识别回归查询 |
| Extended Events 扩展事件 | XEvent | 轻量跟踪,捕获死锁、慢查询、等待事件,替代 Profiler |
| SQL Server Profiler | 已弃用 | 传统跟踪,高负载本身会带来性能损耗 |
| SSMS 执行计划 | 实际执行计划 | 分析 SQL 索引使用、扫描、键查找 |
| DBCC 命令 | DBCC MEMORYSTATUS、DBCC SQLPERF(LOGSPACE)、DBCC SHOW_STATISTICS |
内存、日志、统计信息查看 |
| 维护计划 / SQL Server Agent | 代理作业 | 索引重建、统计更新、备份、数据库一致性检查 |
| Resource Governor 资源调控器 | 资源池、工作负荷组 | 限制不同业务 CPU、内存资源占用 |
| Windows Perfmon 性能监视器 | SQL Server:*计数器 |
CPU、内存、Buffer 命中率、IO、连接数监控 |
| AlwaysOn 可用性组 | 高可用组件 | 读写分离、故障转移,解决单实例性能上限 |
上下游配套
- 上游:业务应用程序、连接池驱动 (ODBC/OLEDB);ETL 工具;报表分析服务 SSAS。
- 硬件层:服务器 CPU、内存、SSD 磁盘阵列 RAID10;存储阵列;网卡;虚拟化宿主机。
- 网络层:局域网交换机;AlwaysOn 同步链路;跨机房公网链路。
- 下游:备份存储;监控告警系统;运维自动化脚本。
六、边界
- 硬件边界:单实例硬件天花板;单实例 CPU、内存、IOPS 存在物理上限;超大规模业务需要分片、AlwaysOn 读写分离做横向扩展。
- 内存边界:Buffer Pool 无法超过物理内存;大并发大数据量会触发大量物理 IO。
- 锁并发边界:SQL Server 锁机制为悲观为主;高并发写场景会出现锁冲突;隔离级别越高,一致性越强,并发越低。
- TempDB 全局边界:所有会话共享一套 TempDB;一个会话的大量排序溢出会拖累全部业务。
- 计划缓存边界:计划缓存占用内存;参数嗅探、不同参数生成不同计划,缓存膨胀;老旧计划不会自动失效。
- 事务日志边界:日志是顺序写,但是 VLF 碎片化、日志频繁自动增长会严重影响写入性能。
- 网络边界:TDS 协议传输大数据集,网络延迟会放大查询耗时;跨广域网络部署,延迟不可消除。
- 备份维护作业边界:备份、索引重建、DBCC CHECKDB 会消耗大量资源,不能在业务高峰执行。
七、自动化流水线(性能排查 + 优化闭环流水线)
闭环:采集 → 定位瓶颈 → 验证优化 → 持续监控告警
7.1 采集阶段
- 开启 Query Store,捕获查询历史、执行计划、耗时、逻辑读。
- 部署 Perfmon 计数器采集:CPU、内存、Buffer 缓存命中率、磁盘 IOPS、延迟、连接数。
- 部署 Extended Events:捕获死锁、长耗时查询、高等待事件。
- 定时采集 DMV 快照:
sys.dm_os_wait_stats等待统计、IO 统计、高消耗 SQL 统计。
7.2 瓶颈定位阶段
- 优先看等待统计,识别 Top 等待类型:PAGEIOLATCH(IO)、LCK_M(锁)、PAGELATCH_UP (TempDB 闩锁)、SOS_SCHEDULER_YIELD (CPU 压力)。
- 结合 Query Store 找出 TOP 慢 SQL;查看实际执行计划,识别全表扫描、缺失索引、参数嗅探。
- 检查系统配置:
max server memory、MAXDOP、cost threshold for parallelism、TempDB 文件数量大小。 - 检查索引碎片、统计信息更新时间。
- 检查磁盘 IO 延迟、事务日志 VLF 数量。
- 检查长事务、未提交事务,分析死锁图。
7.3 优化实施阶段
根据瓶颈类型执行对应优化:
- CPU 瓶颈:改写 SQL、增加索引、调整 MAXDOP、修复参数嗅探、更新统计信息。
- 内存瓶颈:调整 max server memory,优化查询减少逻辑读,优化索引,评估内存优化表。
- IO 瓶颈:数据 / 日志 / TempDB 分盘;SSD;调整文件大小避免自动增长;索引维护。
- 锁并发死锁:缩短事务,调整隔离级别,优化索引减少扫描范围,拆分大事务。
- TempDB 瓶颈:多数据文件,统一初始大小,避免自动增长。
- 计划缓存问题:重编译提示、OPTIMIZE FOR,清理无效计划。
- 配置优化:Resource Governor 限制资源;调整 Agent 作业到业务低峰。
7.4 验证回归阶段
- 优化前后对比 Query Store 查询耗时、逻辑读。
- 对比等待统计、Perfmon 指标。
- 压力测试模拟业务负载,确认无性能退化。
7.5 持续监控与自动化维护
- SQL Agent 自动化作业:索引重建 / 重组、更新统计信息、备份。
- 配置告警:CPU 过高、IO 延迟过高、死锁发生、长时间运行查询。
- 定期巡检:VLF 碎片、TempDB 状态、缺失索引、过期统计信息。
- 版本补丁管理:定期更新 CU 累积更新,修复已知性能 bug。
7.6 故障演练
- 模拟大查询消耗 CPU,验证告警触发。
- 模拟磁盘 IO 压力,观察等待事件变化。
- 模拟长事务,观察锁阻塞情况。
八、多部署模式下的差异
- 单机模式:瓶颈集中本机硬件;风险点 SQL Server 耗尽整机内存。
- 局域网模式:数据库与应用内网千兆通信;主要瓶颈在数据库本身;网络一般不是瓶颈。
- 外网 / 云模式:增加网络延迟风险;云存储 IOPS 配额限制;AlwaysOn 跨公网同步延迟。
- 复合型多合一:应用内网访问,异地报表跨外网访问;读写分离;需要同时监控数据库引擎 + 内网链路 + 外网链路。
MS SQL Server 性能瓶颈总览(结构化梳理)
SQL Server 瓶颈本质归为硬件资源、引擎内部、SQL 与对象设计、配置、并发事务、外部依赖六大类,每一类包含现象、底层诱因、典型等待类型、定位手段、处置方案。
一、CPU 瓶颈
现象:服务器 CPU 持续高位,查询响应慢,大量查询编译、计算消耗 CPU。
- 诱因:缺少索引导致全表扫描;复杂聚合 / 排序;参数嗅探造成错误执行计划;过度并行;频繁 SQL 编译重编译;大批量逻辑读。
- 典型等待:
SOS_SCHEDULER_YIELD - 定位:
sys.dm_exec_query_stats、查询存储 Query Store、实际执行计划 - 处置:补合适索引;改写低效 SQL;更新统计信息;调整
MAXDOP、并行开销阈值;减少不必要重编译。
二、内存瓶颈
现象:Page Life Expectancy (PLE) 持续偏低,大量物理 IO,整机内存吃紧,操作系统颠簸。
- 诱因:
max server memory未限制吃光整机内存;内存配置小于业务工作集;缓存命中率低;大查询消耗大量内存;计划缓存膨胀。 - 典型等待:
RESERVED_MEMORY_ALLOCATION_EXT - 定位:
DBCC MEMORYSTATUS、sys.dm_os_memory_clerks、性能监视器 Buffer 相关计数器 - 处置:合理设置最大最小服务器内存;优化 SQL 降低逻辑读;使用内存优化表处理高频 OLTP;清理无效执行计划。
三、磁盘 I/O 瓶颈(最常见)
现象:查询卡顿,IO 延迟高,读写队列堆积。
- 诱因:机械盘性能不足;数据 / 日志 / TempDB 混在同一磁盘;文件频繁自动增长;索引碎片大;VLF 日志碎片;备份、索引重建高峰运行。
- 典型等待:
PAGEIOLATCH_SH / PAGEIOLATCH_EX - 定位:
sys.dm_io_virtual_file_stats、Perfmon 磁盘延迟计数器 - 处置:SSD/RAID‑10;数据、日志、tempdb 物理分离;预分配文件大小;定期索引维护;避开业务高峰执行备份与 DBCC 任务。
四、TempDB 专项瓶颈(全局共享资源)
现象:高并发业务随机卡顿,与业务查询无关,整体实例变慢。
- 诱因:TempDB 单数据文件;文件大小不一致;自动增长;大量排序、哈希、临时表、行版本溢出到 TempDB。
- 典型等待:
PAGELATCH_UP(PFS/GAM/SGAM 闩锁) - 定位:
sys.dm_db_file_space_usage - 处置:多数据文件,大小一致;预分配;关闭自动增长;优化大查询减少排序溢出。
五、锁、阻塞与死锁(并发瓶颈)
现象:部分会话超时、卡死,业务报错死锁。
- 诱因:事务执行时间过长;隔离级别过高;缺少索引造成大范围扫描加锁;访问资源顺序不一致。
- 典型等待:
LCK_M_*系列等待 - 定位:扩展事件、死锁图、
sys.dm_tran_locks - 处置:缩短事务;优化索引缩小扫描范围;调整隔离级别;统一资源访问顺序。
六、查询执行计划 / 统计信息瓶颈
现象:同样 SQL 时而快时而慢;升级 / 数据量变化后性能断崖下跌。
- 诱因:统计信息过期失真;参数嗅探;计划缓存膨胀;隐式转换。
- 定位:Query Store、实际执行计划、
DBCC SHOW_STATISTICS - 处置:定期更新统计信息;使用查询提示;必要重编译;避免 where 条件字段函数运算、隐式转换。
七、索引相关瓶颈
- 缺少索引:全表扫描,CPU/I/O 飙升。
- 索引过多:写入(insert/update/delete)开销暴涨。
- 索引碎片高:页拆分,IO 放大。
- 定位:
sys.dm_db_index_physical_stats - 处置:按需创建索引;删除未使用索引;碎片高执行
REBUILD / REORGANIZE。
八、事务日志瓶颈
现象:写入吞吐量上不去,日志文件异常膨胀。
- 诱因:长事务、完整恢复模式下未做日志备份;大量 VLF 虚拟日志碎片;日志磁盘性能差。
- 定位:
DBCC SQLPERF(LOGSPACE)、查看 VLF 数量 - 处置:定期日志备份;合理选择恢复模式;预分配日志大小,避免频繁自动增长。
九、网络瓶颈
现象:数据库服务器负载不高,但应用侧响应慢;跨机房、AlwaysOn、LinkedServer 查询延迟高。
- 诱因:带宽不足、网络抖动;大结果集 TDS 传输;加密开销。
- 定位:网络延迟、吞吐量监控
- 处置:应用与数据库就近部署;结果集精简;开启传输压缩;优化 AlwaysOn 链路。
十、配置参数不合理瓶颈
现象:硬件配置很好,但数据库性能上不去。
- 诱因:
MAXDOP、并行开销阈值、内存限制、最大连接数、资源调控器配置错误。 - 定位:查看实例配置选项、DMV 配置视图
- 处置:按照业务负载调参;虚拟化环境避免宿主机资源抢占;使用 Resource Governor 隔离业务负载。
十一、备份、维护任务带来的干扰瓶颈
现象:业务时段突发性能抖动。
- 诱因:高峰执行全量备份、索引重建、DBCC CHECKDB。
- 处置:调度至业务低峰;使用差异备份、日志备份;开启备份压缩。
十二、外部依赖瓶颈
现象:数据库本身负载正常,但部分业务慢。
- 诱因:LinkedServer、ETL、外部存储过程调用外部服务;第三方集成。
- 处置:减少跨库跨实例查询;异步处理;缓存外部结果。
十三、版本与补丁带来的隐性瓶颈
现象:特定场景复现性能异常,无明显业务逻辑问题。
- 诱因:已知 BUG,缺失累积更新 CU。
- 处置:定期更新 SQL Server 累积更新,版本升级评估。
标准排查流水线(极简闭环)
- 看等待统计,确定瓶颈大类(CPU / IO / 闩锁 / 锁阻塞)
- Query Store 抓取 TOP 慢 SQL,看实际执行计划
- 核查索引、统计信息、TempDB、日志 VLF、磁盘 IO 延迟
- 核查实例参数配置
- 实施优化,对比优化前后指标
- 建立监控告警 + 自动化维护作业持续巡检
SQL Server 另类 / 特殊隐性瓶颈(常规排查容易漏掉,不属于标准 CPU / 内存 / IO 大类)
现象:服务器硬件指标看着正常,CPU、内存、磁盘 IO 都不高,但业务卡顿、超时、偶发抖动;常规 DMV 容易被忽略,很多是引擎内部机制、元数据、自旋锁、版本存储、外部侵入、虚拟化、高可用组件带来的隐性问题Microsoft ...。
1. 自旋锁(Spinlock)争用【引擎内部 CPU 隐性瓶颈】
现象:CPU 持续偏高,但慢查询找不到消耗源;吞吐量上不去;大量spins/backoff退避;高多核大 CPU 机器更容易复现;磁盘 IO、锁等待数值很低Microsoft ...。
- 诱因:内部共享数据结构高并发争抢;典型
LOCK_HASH锁哈希桶、SOS_CACHESTORE计划缓存自旋锁争用;高频未限定对象名引发编译锁争抢;大并发热点行访问Microsoft ...。 - 典型 DMV:
sys.dm_os_spinlock_stats看碰撞、自旋、退避计数。 - 坑点:不是闩锁、不是锁,是用户态循环自旋,不进入等待队列,传统 wait_stats 看不到;极易被误认为普通 SQL 高 CPU。
- 处置:使用两部分命名
库名.对象名减少编译;调整负载模式;部分场景需要 CU 累积更新修复已知 bug;跟踪标志缓解特定自旋锁争用。
2. 索引尾页闩锁争用(标识列热点插入)
现象:高并发插入自增 ID (identity) 聚集索引表,磁盘 IO 压力不大,但大量PAGELATCH_EX闩锁等待,所有插入会话排队,插入吞吐量上不去,无锁阻塞,是闩锁不是锁阻塞Microsoft ...。
- 诱因:所有新行全部写入索引最后一页,该页成为热点页,大量会话争抢同一页闩锁。
- 定位:看
sys.dm_os_latch_stats;看等待资源的 pageID 全部指向同一个页。 - 处置:使用序列 + 哈希分片;分区表;引导插入分散到不同数据页;TF‑1118 旧版本缓解分配页争用。
3. 行版本存储膨胀(快照隔离 / RCSI 隐性 TempDB 暴涨)
现象:业务没有大量临时表,但tempdb持续暴涨;磁盘空间持续消耗;查询变慢;常规 TempDB 排查看不到大量临时对象。
- 诱因:开启快照隔离 / 读已提交快照隔离 RCSI;长时间未提交事务,版本存储旧行版本无法清理,全部堆在 TempDB 版本存储;哪怕业务不手动建临时表也会疯狂占用 TempDB 空间Microsoft ...。
- 定位:
sys.dm_tran_version_store_space_usage。 - 坑点:很多 DBA 以为 TempDB 暴涨一定是 #临时表,忽略 RCSI 版本存储。
- 处置:消灭长事务;合理管控快照隔离级别;监控版本存储占用。
4. RESOURCE_SEMAPHORE 查询内存授予饥饿
现象:服务器物理内存充足,但部分大查询直接 8645 错误超时;大量会话挂起等待,Buffer Pool 命中率正常。
- 诱因:排序、哈希连接需要查询工作内存(Memory Grant),该内存和 Buffer Pool 缓冲池是两套独立内存池;大量并发大查询把查询内存耗尽,新查询拿不到内存授权,排队等待,哪怕整机内存还有剩余。
- 等待类型:
RESOURCE_SEMAPHORE;计数器Memory Grants Pending >0。 - 处置:优化大查询减少内存申请;Resource Governor 资源调控器限制单查询最大内存;拆分超大查询;开启内存授予反馈(新版本)。
5. ASYNC_NETWORK_IO 假象网络瓶颈(并非网络故障)
现象:大量ASYNC_NETWORK_IO等待,数据库服务器 CPU/IO 压力很低;很多人直接判定网络问题,实际是应用端瓶颈CSDN博...。
- 诱因:SQL Server 已经把结果集发送给客户端,应用程序读取结果集速度太慢,缓冲区塞满,数据库侧等待客户端消费数据;常见
select *返回超大结果集,应用没有流式读取。 - 坑点:网络带宽、ping 延迟全部正常,问题根源在应用层。
- 处置:精简结果集,不要返回不需要的列;优化应用数据读取逻辑;分批读取。
6. 元数据闩锁争用(高频创建销毁临时对象)
现象:高并发短存储过程,频繁create table #tmp / drop table #tmp;整体实例随机卡顿;磁盘 IO 压力不高;TempDB IO 计数器正常。
- 诱因:频繁创建销毁临时对象,频繁访问系统元数据表,产生元数据闩锁争抢;并不是数据页闩锁,是系统目录元数据热点争用。
- 处置:SQL2017 + 开启临时对象缓存;2019 + 内存优化 TempDB 元数据;复用临时对象,不要频繁销毁重建。
7. Threadpool Worker 线程饥饿(工作线程耗尽)
现象:新连接请求直接卡住,查询长时间不执行;服务器 CPU、内存不一定跑满;等待类型THREADPOOL。
- 诱因:长查询、长阻塞把 SQLOS Worker 工作线程耗尽,没有可用线程分配给新会话;不是 TCP 连接数满,是引擎内部工作线程耗尽,应用连接还能建立,但 SQL 无法执行任务。
- 坑点:应用连接池显示连接成功,但是 SQL 完全不跑;普通 DBA 容易误以为是连接数超限。
- 处置:消除长阻塞长查询;检查 max worker threads 配置;使用 DAC 专用管理员连接排查。
8. 日志 VLF 虚拟日志文件碎片化(隐性写入、恢复、备份变慢)
现象:写入吞吐量上不去;日志备份、数据库恢复、回滚时间异常长;磁盘 IO 延迟指标看着尚可。
- 诱因:事务日志文件多次小步自动增长,生成成千上万碎片化 VLF 虚拟日志文件;不是物理磁盘问题,是日志内部逻辑碎片。
- 定位:
DBCC LOGINFO,返回行数即 VLF 数量。 - 处置:重建事务日志,预分配合理日志大小,关闭自动增长。
9. AlwaysOn 副本重做线程被 SCH‑S 架构锁阻塞(高可用隐性瓶颈)
现象:主库负载正常,副本延迟持续拉大;副本服务器硬件空闲;重做队列不断堆积。
- 诱因:副本上有长时间运行的查询持有架构共享锁
SCH‑S;重做线程需要拿SCH‑M架构锁应用 DDL 日志,被阻塞,整个副本重做卡住,日志堆积。 - 定位:扩展事件
sqlserver.lock_redo_blocked,查看副本会话哪个会话持有架构锁阻塞重做线程Microsoft ...。 - 坑点:很多人只看网络、磁盘,忽略副本报表查询阻塞重做线程。
10. 第三方驱动 / 杀毒 / 过滤驱动注入 sqlservr.exe 进程地址空间
现象:无规律性能抖动、17883 调度器警告;偶发进程卡死、内存转储;业务负载不高,但是非抢占模式调度器告警;特权 CPU 时间占比高;SQL Server 本身无 bug,第三方模块注入 sqlservr.exe 进程内部干扰执行流Microsoft ...。
- 诱因:杀毒、备份代理、安全防护软件把 dll 注入 sqlservr.exe 进程地址空间。
- 处置:排查 sqlservr 加载的非微软模块;排除杀毒扫描数据库 mdf/ldf 文件。
11. 虚拟机嘈杂邻居(Noisy‑Neighbor)宿主机抢占
现象:数据库虚拟机内部看 CPU、内存计数器正常,但实际性能忽高忽低;业务压力稳定,性能周期性抖动。
- 诱因:虚拟化宿主机 CPU、内存、存储 IO 被其他虚拟机抢占;SQL Server 虚拟机内部计数器无法直接看到宿主机抢占。
- 坑点:只看 VM 内部指标会误判,以为是数据库问题。
- 处置:宿主机层面监控;预留资源;避免超配。
12. 电源计划配置隐性性能衰减(服务器 BIOS/Windows 电源管理)
现象:硬件配置很高,但是 CPU 无法跑满睿频,查询响应整体偏慢;压力上去 CPU 降频。
- 诱因:Windows 电源计划设置为平衡 / 节能;BIOS 开启节能降频,CPU 频繁降频。
- 处置:Windows 电源计划改为高性能;BIOS 设置为性能模式。
13. 大量极小自动提交事务,日志刷盘风暴
现象:大量短 INSERT/UPDATE,每一行都是隐式自动提交;磁盘日志磁盘 IO 很高,CPU 不高;大量WRITELOG等待。
- 诱因:循环单行提交,每一行触发一次日志刷盘,大量小事务放大日志 IO 压力,哪怕每行数据很小。
- 处置:合并批量事务,减少 commit 次数。
14. 参数嗅探衍生:计划缓存膨胀、大量无效编译
现象:CPU 偏高,业务逻辑变化不大;大量单次使用的一次性执行计划充斥计划缓存,占用大量内存;每次参数不同就重新编译。
- 诱因:存储过程参数嗅探;应用传入动态 SQL 没有参数化,字符串拼接 SQL,每一组参数生成新计划,计划缓存爆炸。
- 坑点:很多人只看慢查询,忽略大量快速查询带来的编译开销。
- 处置:应用参数化;优化存储过程;Query Store 强制固化优秀计划。
15. IAM 链碎片化(极小表占用巨大索引页)【非常罕见】
现象:表实际行数很少,但统计信息更新、索引维护异常缓慢;磁盘占用虚高。
- 诱因:高频 DML + 分区,造成 IAM 索引分配映射链极度碎片化,大量 IAM 分配页堆积,实际数据很少,但遍历 IAM 链开销巨大。
- 定位:查看索引分配页;重建索引可临时修复。
16. HADR_SYNC_COMMIT 同步副本等待(主库写入被副本拖慢)
现象:主库事务提交慢,业务写入卡顿;主库磁盘 IO 正常;等待类型HADR_SYNC_COMMIT。
- 诱因:AlwaysOn 同步提交模式;主库提交需要等待副本日志固化完成;副本磁盘慢、网络延迟高直接拖慢主库写入性能。
- 坑点:很多 DBA 只看本机磁盘,忽略同步副本对主库写入的影响。
17. 长空闲会话持有打开事务(无操作,但锁 / 版本存储持续累积)
现象:会话处于 sleep 休眠状态,但是事务没有 commit/rollback;不跑 SQL,但持续持有锁、驱动版本存储暴涨;看不到活跃执行请求,但是系统持续恶化。
- 定位:
sys.dm_tran_open_transactions查看休眠会话的打开事务。 - 诱因:应用程序 bug,异常断开没有回滚事务,会话空闲但事务保持打开。
18. 跟踪 / 扩展事件负载本身带来性能损耗
现象:开启 Profiler、大量无过滤扩展事件后,数据库整体性能下降。
- 诱因:未过滤的 Profiler 本身开销巨大;高负载下跟踪采集本身成为性能杀手。
- 坑点:为排查性能,开启跟踪,反而加剧性能问题。
- 处置:优先使用轻量扩展事件,增加严格事件过滤,避免 Profiler。
特殊瓶颈快速排查顺序(补充原有流水线)
- 优先看信号等待占比:区分是真资源等待,还是 CPU 调度自旋等待。
- 检查
sys.dm_os_spinlock_stats识别自旋锁争用。 - 检查
THREADPOOL、RESOURCE_SEMAPHORE、ASYNC_NETWORK_IO特殊等待。 - 检查是否存在 sleep 状态的打开事务。
- 检查版本存储、VLF 数量。
- AlwaysOn 环境检查重做线程是否被架构锁阻塞。
- 区分:问题是 SQL Server 内部,还是应用、虚拟机宿主机、注入第三方 DLL。
MS SQL Server 在运行过程中可能会遇到一些瓶颈问题,影响性能和稳定性。常见的瓶颈问题有以下几种:
1. CPU瓶颈
- 原因:查询执行时使用大量计算资源,导致CPU利用率过高。
- 解决方案:
- 优化查询,避免全表扫描,使用合适的索引。
- 通过分区表和分区视图来减少查询的数据量。
- 监控SQL Server的执行计划,找出高消耗的查询。
2. 内存瓶颈
- 原因:SQL Server的内存分配不足,或者数据库缓存的命中率低。
- 解决方案:
- 增加SQL Server分配的内存,确保其内存使用与实际负载匹配。
- 使用
DBCC MEMORYSTATUS检查内存分配和使用情况。 - 配置适当的
max server memory以防止SQL Server占用过多内存。
3. 磁盘I/O瓶颈
- 原因:磁盘读取或写入操作较慢,影响数据库性能。
- 解决方案:
- 将数据文件、日志文件和临时数据库文件分布到不同的物理磁盘上,以提高I/O性能。
- 使用RAID 10或其他高性能磁盘阵列。
- 定期维护索引和数据库,减少碎片化。
4. 锁和死锁
- 原因:并发访问导致资源竞争,进而出现锁和死锁问题。
- 解决方案:
- 使用适当的事务隔离级别,避免长时间持有锁。
- 优化事务,避免在事务中进行不必要的复杂计算。
- 使用SQL Server Profiler和Deadlock Graph分析死锁情况。
5. 网络瓶颈
- 原因:网络延迟或带宽不足导致客户端和SQL Server之间的通信效率降低。
- 解决方案:
- 使用较快的网络连接(例如,千兆网卡或更高)。
- 确保网络设备和交换机正常工作,避免网络拥塞。
6. SQL查询优化不足
- 原因:查询没有优化,导致执行时间过长,消耗过多的CPU和I/O资源。
- 解决方案:
- 使用查询优化工具,如SQL Server Management Studio中的执行计划。
- 对常用查询创建适当的索引。
- 重写复杂查询,避免使用不必要的子查询或联接。
7. 数据库设计问题
- 原因:不合理的数据库设计可能导致性能瓶颈,如没有分区的表或缺少外键约束。
- 解决方案:
- 采用适当的规范化和反规范化策略。
- 使用表分区来处理大数据量。
- 定期审查和优化数据库设计。
如果遇到瓶颈问题,最有效的方式是使用SQL Server的性能监控工具,如SQL Profiler、Performance Monitor以及Dynamic Management Views (DMVs),来定位问题根源,并根据具体情况采取针对性措施。
继续补充一些 MS SQL Server 可能会遇到的瓶颈问题及其解决方案:
8. 并发连接问题
- 原因:当多个用户并发访问数据库时,如果没有正确配置并发处理机制,可能导致性能瓶颈。并发连接过多或等待资源的时间过长,可能会影响数据库的响应时间。
- 解决方案:
- 调整
Max Degree of Parallelism (MAXDOP)参数,控制并行查询的数量,以防止过多的并行查询导致性能下降。 - 配置
Connection Pooling来减少连接开销。 - 优化数据库连接池的大小,避免过多的空闲连接消耗资源。
- 调整
9. TempDB瓶颈
- 原因:TempDB是一个临时数据库,所有临时对象、排序操作等都会存储在其中。如果TempDB没有合理配置或空间不足,可能会造成性能瓶颈。
- 解决方案:
- 将TempDB文件分布到多个磁盘上,提高I/O性能。
- 确保TempDB有足够的空间,并定期清理不再需要的临时数据。
- 使用多个TempDB数据文件(一个文件每个处理器核心),来减少资源竞争。
10. 索引问题
- 原因:缺少必要的索引、过多的索引或者索引的碎片化都可能导致查询效率低下。
- 解决方案:
- 定期维护索引,使用
DBCC SHOWCONTIG和sys.dm_db_index_physical_stats来检查索引的碎片情况,并使用REBUILD或REORGANIZE命令来优化索引。 - 为常用的查询和连接创建合适的索引,避免全表扫描。
- 避免创建过多的索引,因为索引会增加写操作的开销,影响写入性能。
- 定期维护索引,使用
11. 日志文件瓶颈
- 原因:SQL Server的事务日志文件如果未妥善管理,可能会导致日志写入的瓶颈。日志文件过大或存放在不适合的磁盘上,都会影响数据库的性能。
- 解决方案:
- 定期备份事务日志,并在合适的时间进行压缩。
- 将事务日志文件存放在与数据文件不同的物理磁盘上。
- 配置合适的日志文件大小,避免日志文件过度增长。
12. SQL Server服务配置
- 原因:SQL Server的默认配置并不适合所有类型的工作负载。如果没有根据硬件和工作负载的需求调整服务配置,可能会导致性能问题。
- 解决方案:
- 根据硬件资源调整SQL Server的内存、CPU、磁盘等配置,例如设置
max server memory和min server memory来控制内存的使用。 - 配置
Cost Threshold for Parallelism来控制何时使用并行查询。 - 配置
Max Server Memory参数,避免SQL Server占用系统所有内存,从而影响操作系统和其他应用程序的性能。
- 根据硬件资源调整SQL Server的内存、CPU、磁盘等配置,例如设置
13. 表结构和存储设计问题
- 原因:表结构设计不合理,例如使用过多的冗余数据或缺乏数据归一化,会导致数据库查询效率低下。
- 解决方案:
- 遵循合理的数据库设计原则,如规范化(Normalization)与反规范化(Denormalization)的平衡,避免冗余数据。
- 使用合适的数据类型,避免使用过大的数据类型(例如,避免使用
TEXT或NTEXT,可以考虑使用VARCHAR(MAX))。 - 根据实际数据的访问模式设计表结构,例如频繁查询的列应该有索引,而不是所有列都建立索引。
14. 查询计划缓存问题
- 原因:SQL Server会缓存执行计划以提高查询性能,但如果执行计划过于陈旧或不适用,可能会导致查询性能下降。
- 解决方案:
- 使用
DBCC FREEPROCCACHE来清理过时的查询计划。 - 通过
OPTIMIZE FOR或OPTION (RECOMPILE)等提示来强制使用最新的查询计划。 - 定期使用
SQL Server Profiler和Extended Events跟踪查询计划的使用情况,及时发现不合适的查询计划。
- 使用
15. SQL Server版本和补丁
- 原因:使用旧版本的SQL Server或没有及时安装最新的更新和补丁可能会遇到一些已知的性能问题和漏洞。
- 解决方案:
- 保持SQL Server及操作系统的最新更新,确保安装了所有的服务包(Service Packs)和累积更新(Cumulative Updates)。
- 考虑升级到SQL Server的最新版本,以便充分利用新特性和性能优化。
16. 死锁检测与解决
- 原因:多个事务之间的资源竞争导致死锁,造成系统不响应。
- 解决方案:
- 使用SQL Server的死锁图(Deadlock Graph)来分析并优化死锁问题。
- 优化事务逻辑,减少锁的粒度,避免长时间占用锁。
- 定期使用
SQL Server Profiler捕获死锁事件,并采取相应措施,如更改事务的隔离级别或重新设计并发访问模式。
17. 异步I/O性能
- 原因:如果SQL Server配置不当,异步I/O操作可能会导致性能下降,尤其在高负载的情况下。
- 解决方案:
- 确保使用高性能的磁盘阵列(如RAID 10)来存储数据文件、日志文件和TempDB文件。
- 检查磁盘的I/O性能,确保磁盘读取和写入速度符合SQL Server的需求。
解决SQL Server的瓶颈问题通常需要系统地排查并通过优化查询、配置、硬件资源等多个方面的措施来提升性能。定期的性能监控和调整,结合最佳实践和正确的数据库设计,是确保数据库高效运行的关键。
继续补充关于 MS SQL Server 性能优化的瓶颈问题及解决方案:
18. 存储过程和函数的性能
- 原因:存储过程和函数虽然可以提升代码复用性,但如果没有优化,可能导致性能瓶颈。特别是在复杂的存储过程中,过多的逻辑和不必要的计算可能使查询执行缓慢。
- 解决方案:
- 精简存储过程的逻辑,避免在存储过程中进行过多复杂的计算。
- 使用表变量(Table Variables)而不是临时表,尤其是当数据量较小且作用范围较小时。
- 使用条件语句(如
IF...ELSE)时要确保条件分支的效率,避免复杂的逻辑判断。 - 避免在存储过程中使用
SELECT *,尽量只返回需要的列。 - 对存储过程进行参数化,避免重复编译执行计划。
19. SQL Server配置中的最大并发连接数
- 原因:SQL Server允许多个并发连接,但当连接数达到系统设置的上限时,性能会受到影响。特别是在大规模并发查询时,可能导致线程和CPU资源被过度占用。
- 解决方案:
- 配置
max connections来限制最大连接数,防止过多连接占用资源。 - 使用连接池(Connection Pooling)以减少新连接的开销,提升连接效率。
- 监控活动连接数,及时调整连接策略,确保资源的合理分配。
- 配置
20. 网络带宽和延迟
- 原因:在分布式环境或高并发查询时,网络带宽和延迟成为影响SQL Server性能的重要因素。尤其是跨区域、跨数据中心访问时,延迟问题可能导致查询响应时间大幅增加。
- 解决方案:
- 优化网络拓扑,确保SQL Server的网络连接稳定,带宽充足。
- 使用压缩技术减少传输数据量,优化数据流。
- 使用负载均衡(Load Balancer)优化流量分配,避免单点瓶颈。
21. 跨数据库查询
- 原因:在多个数据库之间执行跨数据库查询可能会导致性能问题,尤其是在分布式系统中,当查询跨越多个服务器时,延迟和同步问题可能影响查询性能。
- 解决方案:
- 尽量避免跨数据库查询,尤其是在实时系统中,改为在一个数据库内完成相关操作。
- 如果必须跨数据库查询,尽量将相关数据汇聚到一个视图中,减少跨库操作的频繁发生。
- 考虑使用
Linked Server配置跨数据库连接,但要确保网络带宽和查询计划的优化。
22. 数据仓库和数据挖掘查询
- 原因:在处理大规模数据分析时,数据仓库中的查询(例如OLAP查询)和数据挖掘可能会导致数据库性能下降,尤其是没有合适的数据分区和索引设计时。
- 解决方案:
- 对大数据表进行分区处理,通过分区表提高查询效率。
- 使用合适的聚合索引,减少对大数据集的扫描。
- 在数据仓库中使用物化视图(Materialized Views),提前计算并存储复杂查询的结果,减少实时查询负担。
23. 慢查询和高延迟查询
- 原因:慢查询会对数据库性能产生显著影响,尤其是在高负载下。如果数据库没有及时优化,执行时间长的查询会增加系统负担。
- 解决方案:
- 启用SQL Server的查询分析功能(如
Query Store),以捕获并分析慢查询。 - 使用
INDEX HINT来强制查询使用最佳索引,避免数据库选择错误的执行计划。 - 定期审查查询执行计划,找到消耗资源最多的查询并进行优化。
- 将复杂的查询拆分成多个小的查询,降低单个查询的复杂度。
- 启用SQL Server的查询分析功能(如
24. 外部依赖和集成瓶颈
- 原因:当SQL Server与外部系统(如Web服务、外部数据库、文件系统等)进行交互时,可能由于外部系统的性能瓶颈导致SQL Server的性能问题。
- 解决方案:
- 优化外部服务和集成接口的性能,确保数据传输的效率。
- 使用异步处理方式,避免等待外部依赖的响应影响SQL Server的性能。
- 在集成过程中使用缓存技术(例如,缓存外部数据结果),减少对外部服务的调用次数。
25. 备份与恢复操作对性能的影响
- 原因:定期进行备份和恢复操作时,可能会对SQL Server的性能造成负担,特别是在高负载环境下,备份操作可能会增加磁盘I/O并影响系统响应时间。
- 解决方案:
- 在低峰时段进行备份操作,避免高峰时段的干扰。
- 使用增量备份(Differential Backup)和事务日志备份(Log Backup),减少全备份的频率。
- 在备份过程中使用压缩功能,减少备份文件的大小和磁盘I/O负担。
- 对备份文件存储和恢复进行优化,确保恢复过程不会拖慢系统的性能。
26. SQL Server资源限制
- 原因:SQL Server的资源限制(如内存、CPU、磁盘空间等)可能会成为性能瓶颈,特别是在多租户或虚拟化环境中,多个实例竞争资源时容易发生性能下降。
- 解决方案:
- 根据SQL Server的工作负载需求合理配置内存和CPU资源,避免资源分配不足。
- 在虚拟化环境中,为SQL Server实例配置独立的虚拟机资源,避免多个应用争用资源。
- 通过资源限制(Resource Governor)来控制SQL Server资源的使用,确保高优先级任务的性能不受影响。
27. 系统硬件资源过时或不足
- 原因:过时或配置不足的硬件可能无法充分支持SQL Server的性能需求。尤其是磁盘、内存和网络硬件的性能直接影响数据库的运行效率。
- 解决方案:
- 升级硬件,特别是采用更高性能的SSD存储、更高频率的内存和更强大的CPU。
- 监控硬件性能,及时识别并替换故障硬件,避免资源瓶颈。
解决SQL Server的性能瓶颈不仅需要优化数据库本身的查询和配置,还需要综合考虑硬件资源、网络、外部集成等多个因素。通过合理规划和定期维护,确保数据库环境的高效运行,是提高SQL Server性能的关键。
继续补充关于 MS SQL Server 性能优化的瓶颈问题及解决方案:
28. SQL Server实例的配置和资源管理
- 原因:SQL Server实例的配置不当可能导致资源分配不均,进而影响性能。尤其是配置了多个数据库时,不合理的实例设置可能造成某些数据库资源不足。
- 解决方案:
- 配置合理的SQL Server实例和数据库资源,确保每个实例根据业务需求分配足够的内存、CPU和磁盘资源。
- 使用SQL Server的Resource Governor功能,限制某些应用或用户组占用过多的系统资源。
- 定期检查SQL Server实例的运行状态和性能监控,及时发现和调整资源分配。
29. 查询并行化和锁定问题
- 原因:查询并行化可以提升性能,但如果配置不当,可能会导致过度并行化或不必要的锁等待,进而降低系统响应速度。
- 解决方案:
- 调整SQL Server的并行度设置(如MAXDOP),确保并行查询数与硬件配置相匹配,避免因过度并行导致CPU负载过高。
- 定期检查和优化数据库表中的锁定机制,减少死锁发生。可以通过调整事务的隔离级别和锁定策略来优化锁等待。
- 使用锁粒度(Lock Granularity)来避免锁定过大范围的资源。
30. 查询执行计划的优化
- 原因:查询执行计划是数据库执行SQL语句时的路径选择,若没有优化,SQL Server可能选择低效的执行计划,导致查询性能下降。
- 解决方案:
- 启用**查询存储(Query Store)**来捕获和分析查询的执行计划,识别性能瓶颈。
- 对频繁执行的复杂查询进行手动优化,确保SQL Server能选择最优的执行计划。
- 使用查询提示(Query Hints)来强制查询使用某些索引或执行路径。
- 定期更新统计信息(
UPDATE STATISTICS),确保查询优化器可以获取准确的表数据分布信息。
31. 表设计和范式优化
- 原因:数据库表的设计不合理,如没有适当的正则化、冗余数据过多等,会导致存储效率低下和查询性能不佳。
- 解决方案:
- 采用适当的数据库范式设计,避免冗余数据,保证数据的一致性和完整性。
- 在表设计时合理使用索引,避免在表中过多的冗余字段和索引。
- 对表进行适当的分区,尤其是在数据量巨大的情况下,可以通过分区减少扫描时间,提高查询性能。
32. 数据库的自动化维护
- 原因:手动维护数据库可能存在疏漏,导致定期的优化任务(如重建索引、更新统计信息等)未能按时进行,长期积累可能影响性能。
- 解决方案:
- 使用SQL Server的维护计划,自动执行常规任务如备份、重建索引、更新统计信息等。
- 配置自动索引重建,定期检查并重建碎片化严重的索引。
- 使用自动化任务调度工具(如SQL Agent)来安排定时的性能监控和维护操作。
33. 压缩和数据去重
- 原因:数据量过大或不必要的数据冗余会导致存储压力增大和查询性能下降。尤其在数据仓库和大数据环境中,数据的压缩和去重显得尤为重要。
- 解决方案:
- 开启SQL Server的数据压缩功能,尤其是对于历史数据表和只读表,压缩可以显著减小数据存储的占用空间,并提升I/O性能。
- 使用数据去重技术,定期清理不必要的历史数据,优化存储空间的使用。
- 对于日志和临时数据,尽量使用压缩存储和定期清理,以减轻数据库存储压力。
34. 缓存和内存优化
- 原因:SQL Server的缓存机制可以显著提高查询速度,但如果内存不足或缓存配置不当,可能会导致频繁的磁盘I/O操作,从而影响性能。
- 解决方案:
- 配置合理的SQL Server内存限制,确保SQL Server实例能够使用足够的内存缓存查询数据。
- 使用内存优化的表(Memory-Optimized Tables)和内存优化的存储过程(natively compiled stored procedures)来加速高频访问的数据。
- 通过监控缓存命中率(Cache Hit Ratio),确保缓存能够充分利用,减少磁盘I/O的负担。
35. 网络瓶颈和延迟
- 原因:网络延迟和带宽不足会影响SQL Server在分布式环境下的性能,尤其是在高并发访问和大数据量传输时,网络瓶颈显得尤为突出。
- 解决方案:
- 优化网络架构,使用高带宽低延迟的网络设备,确保SQL Server与客户端之间的通信畅通。
- 使用数据压缩和批量传输(Batch Processing)技术减少网络传输数据量。
- 在多地域的分布式部署中,尽量将SQL Server和应用服务器部署在物理上接近的网络位置,以减少跨区域的延迟。
36. 数据库连接池和并发控制
- 原因:数据库连接的管理不当可能导致过多的数据库连接池实例被创建,进而引起资源竞争、连接耗尽或延迟。
- 解决方案:
- 配置适当大小的数据库连接池,避免创建过多的数据库连接。
- 使用连接池技术来减少频繁的数据库连接和断开操作,减少连接的创建和销毁成本。
- 配置SQL Server的最大连接数(
MAX CONNECTIONS)来限制并发连接数,避免因连接数过多导致数据库性能下降。
37. SQL Server的磁盘I/O瓶颈
- 原因:磁盘I/O是SQL Server性能的关键瓶颈之一。特别是在没有使用SSD或配置不当的情况下,磁盘I/O性能可能严重影响数据库的响应时间。
- 解决方案:
- 使用高性能的存储系统,如SSD硬盘,来提升数据库的磁盘I/O性能。
- 配置RAID阵列,确保数据读取和写入的高效性。
- 对SQL Server的日志文件、数据文件和临时文件进行分开存储,避免磁盘I/O瓶颈。
SQL Server的性能优化是一个多方面的任务,不仅仅依赖于SQL查询的优化,还需要从数据库设计、硬件资源、网络配置、存储管理等多个角度入手。定期的性能监控、日志分析和实例优化有助于发现潜在瓶颈并进行及时调整,确保SQL Server始终处于高效的运行状态。
继续补充关于 SQL Server性能优化的其他瓶颈问题及解决方案:
38. SQL Server日志和事务管理
- 原因:SQL Server的事务日志管理不当可能导致日志文件过大,影响磁盘空间使用和数据库恢复速度,进而影响性能。
- 解决方案:
- 定期备份和清理事务日志,确保事务日志文件不会无限制增长。使用事务日志备份(Transaction Log Backups)可以有效清理日志。
- 配置合适的事务日志恢复模式(如 简单模式 或 完整模式),根据应用需求灵活选择,以便优化事务日志的管理。
- 使用日志压缩和日志分割(Log Shipping)来减轻单个日志文件的负担,并提高备份和恢复的效率。
39. 高并发事务和死锁问题
- 原因:高并发的事务可能导致死锁(Deadlock),其中两个或多个事务相互等待对方释放锁,从而造成系统停滞。
- 解决方案:
- 使用适当的事务隔离级别(Isolation Levels),如读已提交(Read Committed)或可重复读(Repeatable Read),减少锁的粒度。
- 优化事务的执行顺序和时长,避免多个事务同时访问相同的数据行,减少死锁的发生。
- 使用SQL Server的死锁监控工具,检测和分析死锁发生的根本原因。通过调整查询、索引或表结构,避免死锁问题。
- 开启死锁图(Deadlock Graph)功能,以便分析死锁情况,制定优化方案。
40. 缓存和内存使用优化
- 原因:SQL Server缓存的有效性与内存使用直接相关。如果内存配置不合理,或者SQL Server无法有效利用内存缓存数据,查询性能将大幅下降。
- 解决方案:
- 配置适当的内存限制(如
min server memory和max server memory),避免SQL Server消耗过多的内存导致系统其他进程无法正常运行。 - 使用SQL Server的内存优化功能(如内存优化表和内存优化存储过程),特别是在处理频繁的OLTP(在线事务处理)场景时。
- 定期检查和优化SQL Server的内存使用,确保数据和索引可以被有效缓存,减少磁盘I/O操作。
- 配置适当的内存限制(如
41. 列存储和行存储的选择
- 原因:在查询性能中,行存储和列存储的选择对不同类型的工作负载有不同的影响。尤其在数据仓库环境下,使用列存储可以显著提高查询性能。
- 解决方案:
- 对于以读取为主的工作负载,特别是分析查询,使用列存储索引(Columnstore Index)可以极大提升性能。它适用于大规模的数据仓库应用,尤其是在进行大数据量的聚合查询时。
- 对于事务型应用,使用行存储(Rowstore)会更加高效,因为它更适合频繁的插入、更新和删除操作。
- 根据业务需求,在不同的数据库表中选择合适的存储类型,行存储和列存储可以并存,共同提高性能。
42. 数据库表分区和分区索引
- 原因:随着数据量的不断增加,数据库表可能变得庞大,导致查询和维护操作的性能下降。分区策略不当可能导致查询效率降低。
- 解决方案:
- 使用表分区(Table Partitioning)将大表划分为多个逻辑上独立的小表,从而提高查询性能。分区可以根据时间(如按月、按季度)或数据范围(如按地区)进行。
- 对分区表创建合适的分区索引,确保查询时能有效利用分区索引加速数据检索。
- 通过合并和拆分分区,根据实际查询和存储需求,动态调整分区策略。
43. 数据库合并和数据归档
- 原因:数据的历史版本和过时的数据可能会影响查询性能和存储效率。没有合适的数据归档机制,可能会导致数据库中存储的数据量持续增长,影响性能。
- 解决方案:
- 使用数据归档(Data Archiving)技术,将过时或不常查询的数据移至归档数据库,以减轻主数据库的负担。
- 定期合并重复的数据,确保数据的去重(Deduplication),从而减少不必要的存储占用。
- 定期清理过时的日志、备份和临时数据,释放存储空间。
44. SQL Server的并发查询和批量操作
- 原因:批量操作或并发查询没有得到有效优化,可能导致锁竞争、资源争夺或超时错误,从而影响性能。
- 解决方案:
- 使用批量插入(Bulk Insert)和批量更新(Bulk Update)操作来高效处理大量数据,而不是逐条处理。
- 对于大量并发查询,使用分批处理技术,避免一次性处理所有数据,减少系统负载。
- 配置SQL Server的并发控制策略,通过限制并发查询数和事务数来平衡资源使用。
45. SQL Server的版本升级与补丁管理
- 原因:使用过时的SQL Server版本或没有及时安装补丁,可能导致性能下降或出现已知的性能瓶颈和漏洞。
- 解决方案:
- 定期检查并升级SQL Server的版本,使用最新的功能和性能优化工具。尤其在进行重大版本更新时,提前进行性能测试和兼容性评估。
- 安装最新的服务包和补丁,修复已知的性能问题和安全漏洞。
- 使用SQL Server的SQL Server Management Studio(SSMS)或SQL Server Configuration Manager工具来执行性能分析,并根据需要进行版本更新。
46. SQL Server的监控与报警机制
- 原因:如果没有适当的监控机制,可能无法及时发现数据库的性能瓶颈和故障,导致系统长时间处于低效状态。
- 解决方案:
- 配置SQL Server的性能监控,包括CPU使用率、内存使用情况、磁盘I/O、网络延迟等关键指标。
- 使用SQL Server Profiler或Extended Events来捕获和分析高负载查询和长时间运行的查询。
- 配置报警机制,在SQL Server出现性能问题时,及时通知数据库管理员进行处理。
SQL Server性能优化是一个动态和持续的过程,需要根据不同的工作负载、硬件配置和应用场景采取不同的优化策略。通过合理配置硬件资源、优化SQL查询、调整数据库设计和管理策略,可以显著提高SQL Server的性能和稳定性。定期的性能评估、监控和维护是确保数据库始终运行高效的关键。
继续补充关于 SQL Server 性能优化 的其他瓶颈问题及解决方案:
47. 索引优化与维护
- 原因:索引是数据库性能优化的关键,错误的索引设计或者缺乏必要的索引会严重影响查询速度,尤其是在涉及大量数据扫描时。
- 解决方案:
- 定期使用索引重建(Rebuild)和索引重组织(Reorganize)来保持索引的健康。对于经常更新的表,重建索引可以清除碎片并提高查询效率。
- 评估现有索引的使用情况,删除不常用的索引,避免过多的索引对插入、更新操作带来额外的性能负担。
- 使用包含列(INCLUDE)索引来提高特定查询的性能,避免全表扫描。
- 对复合索引进行分析,确保索引列的顺序和查询条件相匹配,以避免查询无法利用索引。
48. 分布式数据库和负载均衡
- 原因:随着应用规模的增长,单个数据库实例可能无法承载全部负载,导致性能瓶颈。此时,需要通过分布式架构和负载均衡来扩展性能。
- 解决方案:
- 采用分布式数据库架构,使用SQL Server的Always On可用性组(Always On Availability Groups)或数据库镜像(Database Mirroring)来提高系统的可扩展性和容错能力。
- 配置负载均衡机制,将查询和写入请求分发到多个数据库实例上,减少单一数据库的压力。
- 使用分片技术(Sharding)将数据水平拆分到多个数据库实例中,根据业务需求将数据分布在不同的服务器上。
49. SQL查询优化
- 原因:低效的SQL查询会消耗大量资源并降低数据库性能,尤其是查询没有充分利用索引或查询计划未能优化时。
- 解决方案:
- 使用SQL Server的查询分析器(Query Analyzer)工具,分析查询执行计划(Execution Plan),找出可能的瓶颈或未使用索引的查询。
- 避免在WHERE子句中使用复杂的表达式和函数,减少计算的复杂性。
- 将JOIN操作优化为INNER JOIN,避免不必要的OUTER JOIN,减少计算和内存消耗。
- 优化子查询,尽量避免使用嵌套子查询,改为JOIN或CTE(Common Table Expressions)(公共表表达式)来提升可读性和性能。
- 使用合适的数据类型,避免使用过大的数据类型来存储较小的数据。
50. 数据恢复与备份优化
- 原因:数据恢复和备份策略的不当配置不仅会增加恢复时间,还会影响数据库的性能,尤其在备份过程中占用大量资源时。
- 解决方案:
- 配置定期备份策略,包括完整备份、差异备份和日志备份,确保在发生故障时能够快速恢复数据。
- 优化备份操作,避免在高负载时进行备份,选择在低峰期进行备份,以减少对正常业务操作的影响。
- 使用压缩备份来减少备份文件的大小,节省存储空间。
- 对于大规模的数据库,可以使用分布式备份技术,将备份操作分散到多个服务器上,以提高备份效率和容错能力。
51. 事务和锁优化
- 原因:事务处理过程中使用不当的锁(如共享锁、排他锁)可能导致死锁、锁竞争或事务等待,降低数据库的并发性和性能。
- 解决方案:
- 使用适当的锁粒度,在可能的情况下使用行级锁,而不是表级锁,以减少锁竞争。
- 避免在事务中执行长时间运行的查询或处理,缩短事务的持有时间。
- 调整事务隔离级别,选择合适的级别来平衡并发性和数据一致性(如使用读已提交或可重复读而不是串行化)。
- 使用锁超时和死锁检测功能,及时回滚死锁事务,并减少系统的等待时间。
52. 磁盘I/O优化
- 原因:磁盘I/O是SQL Server性能的一个关键因素。过慢的磁盘读写速度可能导致查询延迟,尤其是在处理大量数据时。
- 解决方案:
- 配置足够的磁盘阵列,使用RAID配置(如RAID 10)来提高磁盘读写性能。
- 使用**固态硬盘(SSD)**代替机械硬盘,以提高I/O性能。
- 将日志文件、数据文件和备份文件分配到不同的物理磁盘上,避免单个磁盘的过载,提升并行读写的能力。
- 使用SQL Server的预读(Read-Ahead)机制,提前加载查询所需的数据,减少I/O延迟。
53. 网络优化
- 原因:网络延迟和带宽不足可能会影响SQL Server的性能,特别是在高并发查询和分布式数据库架构中。
- 解决方案:
- 优化网络配置,确保网络带宽足够,避免网络瓶颈对数据传输造成影响。
- 使用SQL Server的多线程通信(Multi-threaded Communication)来优化数据传输,提升网络效率。
- 配置网络负载均衡,分担不同服务器之间的负载,确保数据库操作的平稳进行。
- 配置TCP/IP性能优化,调整网络包大小和传输速率,减少延迟。
54. 数据压缩与存储优化
- 原因:存储空间不足和存储I/O瓶颈可能影响SQL Server性能,尤其是在数据量极大的场景中。
- 解决方案:
- 启用数据压缩(Data Compression)功能,通过压缩表、索引和行来减少磁盘空间的使用,同时提升I/O性能。
- 使用SQL Server的列存储压缩(Columnstore Compression),特别适用于数据仓库和分析类应用,减少存储需求和提高查询性能。
- 在不影响性能的前提下,使用数据分区、索引压缩等方式进一步优化存储。
SQL Server的性能优化涉及多个方面,从硬件资源的配置到SQL查询的优化,再到数据存储和备份策略的调整。每个优化措施都需要根据实际业务需求、数据库规模和使用场景来进行调整和实施。定期的性能评估、监控和维护是确保SQL Server始终运行高效、稳定的关键。
MS SQL Server 可能会遇到一些瓶颈问题,具体如下:
-
CPU 瓶颈:一个拥有高并发交易的大规模系统往往需要处理大量的数据请求。当系统负载较高时,处理器可能会成为瓶颈,导致应用程序性能下降。
-
内存瓶颈:MS SQL Server 在处理大量数据时需要使用内存,如果系统中内存不足,则可能会导致性能下降或者崩溃。
-
存储瓶颈:大规模系统通常需要存储大量的交易数据,这可能会导致存储空间不足的问题。在此情况下,需要考虑增加存储设备或优化数据存储策略。
-
网络瓶颈:在跨网络进行数据传输时,网络的速度和带宽往往是限制系统可扩展性和性能的瓶颈之一。
-
数据库设计瓶颈:MS SQL Server 的数据库设计非常重要,如果数据库结构不合理或者查询语句不优化,可能会导致系统的性能下降或者响应时间延长。
-
缓存瓶颈:MS SQL Server 提供了缓存机制来提高查询性能,但是如果缓存的数据量过大或者过期机制不合理,可能会导致性能下降或者内存溢出。
-
安全瓶颈:大规模系统通常需要有严格的安全措施来保护敏感数据。如果安全措施不足,数据库可能会遭受攻击或者数据泄露。
-
锁竞争瓶颈:由于MS SQL Server提供了事务处理机制,所以在并发访问数据的时候,可能会出现锁竞争的问题。如果锁竞争严重,可能会导致系统性能下降或者死锁问题。
-
查询优化瓶颈:MS SQL Server 的查询优化也是一个比较重要的方面,如果查询语句没有写好或者没有进行优化,可能会导致查询速度变慢、响应时间过长等问题。
-
日志管理瓶颈:MS SQL Server 的日志管理也是需要注意的。如果不合理使用日志功能,可能会导致磁盘空间占用过大或者备份恢复时间过长。
-
备份恢复瓶颈:在大规模系统中,备份和恢复数据库是非常重要的。如果备份和恢复数据的过程中出现问题,可能会导致数据丢失和系统停机时间过长等问题。
-
兼容性问题:在不同版本的MS SQL Server之间迁移数据库时可能会产生兼容性问题,导致数据损坏或者无法访问数据库。
-
分区瓶颈:在处理大量数据时,MS SQL Server 也可能面临分区瓶颈问题。分区可以将表分成多个逻辑部分,以便于管理和查询大型表的子集。但是,如果分区策略不当,可能会导致查询性能下降。
-
并发控制瓶颈:由于大量数据需要处理大量并发事务,因此并发控制也是系统性能的重要方面。如果并发控制不当,可能会导致事务冲突和锁竞争问题。
-
容灾备份瓶颈:在设计大量数据库时,容灾备份也是一个需要考虑的方面。如果没有合理的容灾备份策略,一旦系统出现故障或者数据丢失,可能会导致系统无法恢复或者系统停机时间过长。
-
性能监控瓶颈:对于大系统来说,性能监控也是非常重要的。如果没有实时监控系统的性能指标并进行优化,可能会导致系统性能下降或者响应时间变慢。
-
数据安全瓶颈:MS SQL Server 的数据安全也是需要考虑的方面。如果数据库中存在敏感数据但没有得到很好地保护,可能会导致系统遭受攻击或者数据泄露问题。
-
资源竞争瓶颈:在大系统中,MS SQL Server 也可能会出现资源竞争的问题,例如CPU、内存、磁盘等资源的竞争。如果没有进行合理的资源管理和调度,可能会导致系统性能下降或者响应时间变慢。
-
数据库访问控制瓶颈:数据库访问控制也是非常重要的,它可以控制用户对数据库的访问权限。如果访问控制不当,可能会导致数据库遭受攻击或者数据泄露问题。
-
数据库设计瓶颈:MS SQL Server 的数据库设计也是需要注意的。如果数据库设计不合理,例如冗余数据过多、表关联过多等,可能会导致查询速度变慢或者响应时间变慢。
-
数据库维护瓶颈:数据库维护也是MS SQL Server 中的一个重要方面。如果没有定期进行数据库维护,例如清理无用数据、重新构建索引等,可能会导致系统性能下降和响应时间变慢等问题。
-
安全审计瓶颈:安全审计也是大规模系统中需要考虑的一个方面。如果没有进行合理的安全审计,可能会导致安全漏洞被利用而系统遭受攻击或者数据泄露问题。
-
锁粒度瓶颈:在MS SQL Server中,对于高并发场景下的数据访问,使用锁机制来保证数据操作的正确性和一致性。但是,如果锁粒度设置不当,例如锁粒度太小或者太大,都可能导致系统性能下降。
-
存储引擎瓶颈:MS SQL Server支持多种存储引擎,例如InnoDB、MyISAM等。不同的存储引擎在处理数据时有不同的优缺点和适用范围。如果没有选择合适的存储引擎或者使用不当,可能会导致系统性能下降或者数据一致性问题。
-
事务管理瓶颈:在大规模系统中,事务管理也是一个需要考虑的方面。如果事务管理不当,可能会导致事务隔离级别不一致、事务失败率升高等问题。
-
数据库连接瓶颈:在MS SQL Server中,数据库连接也是一个可能出现瓶颈的问题。如果连接数超过数据库最大连接数限制或者连接池设置不当,可能会导致系统性能下降。
-
异常处理瓶颈:在大规模系统中,异常处理也是非常重要的。如果没有对异常进行及时处理和记录,可能会导致错误无法追踪或者处理困难等问题。
-
代码质量瓶颈:在开发大规模系统时,代码质量也是一个非常重要的方面。不良的代码设计和实现可能导致系统性能下降、易出现故障等问题。
-
备份和恢复瓶颈:在MS SQL Server中,备份和恢复也是非常重要的。如果备份和恢复策略不当,可能会导致数据丢失、恢复失败等问题。
-
数据库迁移瓶颈:在大规模系统中,随着业务发展和技术变化,有可能需要将本地数据库迁移到云端或者其他平台。数据库迁移涉及到数据转移、应用修改和测试等多个方面,如果迁移过程中出现问题,可能会导致业务中断甚至数据遗失。
-
性能优化瓶颈:为了保证系统的高性能,开发人员需要进行性能优化工作。如果没有对系统的性能进行监控和调优,可能会导致响应时间变慢、访问量增加等问题。
-
容量规划瓶颈:数据库容量管理也是一个需要关注的问题。如果没有合理规划数据库容量,可能会导致数据丢失或者系统崩溃等问题。
-
监控日志分析瓶颈:在大规模系统中,系统监控和日志分析也是非常重要的。通过对系统运行状态和日志信息的监控和分析,可以及时发现并解决问题,提高系统可用性和可靠性。
-
业务规则与数据模型瓶颈:大规模系统的数据库设计需要考虑业务规则和数据模型之间的关系,如果设计不当,可能会导致数据冗余、查询效率低下等问题。
-
数据库版本升级瓶颈:随着MS SQL Server版本的不断升级,需要对数据库进行版本升级来保持系统兼容性和安全性。如果升级过程中没有进行充分的测试和备份,可能会导致数据丢失或者系统不稳定等问题
国产数据库是指由国内企业或机构研发的数据库软件。以下是目前比较知名的国产数据库:
-
OceanBase:由阿里巴巴集团研发,基于分布式架构的关系型数据库系统。
-
GaussDB:由华为公司研发,支持分布式事务、分布式查询、并行计算等功能的关系型数据库。
-
HYPER:由腾讯公司研发,基于 HTAP 架构的高性能关系型数据库。
-
GBase:由国光集团研发,支持高可用和在线扩容功能的关系型数据库。
-
X-DB:由中国科学院计算技术研究所研发,支持分布式事务、多副本备份等功能的关系型数据库。
-
-
-
-
-
-

浙公网安备 33010602011771号