如何保证数据库的可靠性?

2023-11-13 19:11:57 浏览数 (1)

什么是可靠性?系统的可靠性表现为在一定期间内,用户可以预测其发生的行为,也就是说,在一定的期间内,系统不会发生计划外的行为。例如,服务器运行时不会出现意外的停机、应用程序的性能符合预期、计划的停机很少发生等等。

在经常发生变化的环境中,维持系统的可靠性非常困难。例如,受业务影响,应用程序经常发生更改、伴随着用户量的增加,使用模式发生改变、操作系统升级、硬件升级所带来的环境发生变化都会导致系统的稳定性降低。

维护系统的可靠性需要做到以下几点:

  • 衡量管理的系统
    • 测量系统正常运行时的变量值,可以为发布系统的基线做准备。
    • 当系统发生变化时(软硬件升级、配置发生更改、基础架构发生更改等等),需要对照基线再次对变量的值进行测量。
    • 定期测量系统变量,对基线进行升级。其原因在于应用模式发生更改,并且数据量会随着时间的增加而增长。
    • 当遇到问题时,与基线进行对比。如果用户能够精确定位一个问题,解决方案往往变得显而易见。
  • 发布基线

基线的目的是定义什么是正常的,当遇到问题时可以和基线进行对比。随着时间的发展,用户不断调整的基线可以为容量规划提供有效的帮助。

通常情况下,用户需要测量操作系统的指标包括文件系统、内存和CPU的使用率。在Linux上,可以使用top、iosata、vmsata、syssata、sar进行测量。Windows上,用户可以使用资源管理器和性能监视对这些指标进行测量。

当用户使用MySQL时,需要查看MySQL的状态和配置。可以通过“SHOW PROCESSLIST”和“sys.session”查看运行中的语句,也可以通过“mysqladmin extended-status”查看状态变量值。

此外,基线中包括应用程序概要文件,用以记录应用程序在不同使用场景的应答时间,包括登录、检索、创建、读取、更新及删除等。

  • 应用程序概要文件

应用程序概要文件记录发生指定事件的时间、测量每部分操作发生的时间、应用程序是与多个开发环境集成还是作为插件?以及显示对数据库性能故障排除是否有用(假设调用数据库占用了函数执行的5%的时间,用户则可以对该函数的其他部分进行故障排除来获得性能提升)

当用户将应用程序概要文件做为基线的一部分时,可以看到每个功能或用例的关键部分的持续时间。这使得用户可以查看应用程序的大部分延迟是在调用数据库、建立连接时出现的,还是由于其他一些应用程序操作造成的。

数据库为什么会“坏掉”?

数据库发生故障的原因非常多,通常会包括如下:

  • 服务器
    • 存储
    • 网络接口
    • 电源、CPU、内存
  • 连接
    • 网络基础架构
    • 防火墙
    • 负载均衡
  • 应用程序软件
    • 面向用户的组件
    • 框架的稳定性
  • 不可抗力

此外,还需要考虑服务器硬件、虚拟环境、操作系统、共存的应用程序、网络故障及应用程序故障等因素。

  • 服务器硬件
    • 机房是数据库环境中最重要的一部分,确保机房的安全性和可靠性。
    • 使用冗余的硬件,减轻服务器故障的风险。包括电源、RAID、网络适配器。
    • CPU、内存等潜在的损坏风险。
  • 虚拟环境
    • 与其他客户机共享硬盘、内存、网络接口,及CPU。容易受到资源争用影响。
    • 受其他客户机资源分配影响,导致应用程序持续超时。
  • 操作系统
    • 操作系统对于运行MySQL的服务器来说至关重要,操作系统故障会直接导致MySQL故障。
    • 操作系统及时更新、打补丁。
    • 考虑文件系统的性能和安全机制对MySQL的影响。
    • 监视操作系统的日志及变量。
  • 共存的应用程序
    • 安全性
      • 应用程序的漏洞可能允许攻击者访问其他文件,包括MySQL的文件。
      • 应用程序的错误可能会导致性能降级,引发不正常的磁盘访问。
    • 性能
      • 应用程序与MySQL共享CPU内存等会影响MySQL的性能。
  • 网络故障
    • MySQL在以下方面使用网络通信:
      • 客户端和应用程序的连接
      • 复制
      • 管理连接
      • 监视软件
    • 其他网络活动干扰MySQL
      • 操作系统通过网络备份
      • 应用程序通信
      • 文件传输及其他服务
    • 确保网络硬件不会形成单点故障
  • 应用程序故障
    • 应用程序的代码导致许多性能问题。例如,读取大文件、调用远程网络服务,对大数据集使用低效的算法排序等等。
    • 使用应用程序概述文件识别性能问题。
    • 应用程序的错误会导致产生错误的数据,带来安全风险。

基于上述原因,用户在使用MySQL数据库时,需要避免发生类似事件。这是实现系统稳定性的一个最佳实践。

感谢关注“MySQL解决方案工程师”!

0 人点赞