zoukankan      html  css  js  c++  java
  • 性能优化调优 | 如何缩短单笔交易的执行时间

    文章转自:原创作者:杨建旭,https://mp.weixin.qq.com/s/Ump8jkAdc63miveYOFQHDw

    本文不涉及整体架构上的优化,即不讨论怎么提高总体吞吐量,只讨论如何缩短单笔交易的执行时间,虽然这两者是有强关联关系的。(比如说,大多数情况下,缩短单笔交易的执行时间会帮助系统提高最大吞吐量) 

    我们先从软件层面看,如何提高交易的处理效率

    1. 优化编译选项

    2. 优化编译的依赖关系。

    例如:使得动态链接库(so文件)不会轻易被unload,之后又出现load,反复的unload/load非常消耗时间和资源。例如,让动态链接库依赖于一个常驻进程。

    3. 降低日志级别、减少日志输出(即减少写IO)

    4. 并行写N个日志

    多个应用进程并发写N个日志,或者

    数据库并发写N个redo log日志(需要自行开发数据库)

    5. 使用缓存或者缓存数据库

    6. 使用双层缓存,在缓存的基础上再增加一层缓存,变成两层缓存

    7.使用内存数据库,设置数据不落盘

    8. 减少冷启动时间

    定时唤起睡眠的函数,基于预测做函数预热,根据业务情况调整阈值,应对函数休眠、重启、资源扩容、初始化


    9. 优化代码算法

    10. 无需查找的“查找算法”

    例如:

    请求包中带上关键索引ID等信息,直接定位;

    表结构中增加关键索引/指针信息,直接定位;

    为关键使用频率高的信息增加缓冲池,缩小查询范围

    11. 优化备份机制

    第一,   备份要系统资源(CPU、网络、存储),无形中会拖慢整个系统运行速度。

    第二,   如果是数据同步备份,需要一笔业务双写到两份存储后才能返回成功。响应时间变长

    可以做的应对方式

    a)取消备份机制,单机运行

    b)优化备份机制:比如1主6备,改为1主2备(2备再拖4备)

    从硬件层面看,如何提高交易的处理效率

    1. 采用物理机而非虚拟机

    虚拟机在各个层面(CPU、网络、存储)都有额外的虚拟化管理的消耗。而采用物理机无疑没有这方面的额外消耗。

    注:采用物理机(而非虚拟机)会导致系统没有虚拟化层的高可用保证(比如HA、vSAN等等),也会失去虚拟化带来的管理便利。

    2. 采用更高端的硬件设备

    更强的CPU、网卡、存储服务器、交换机

    3. 采用一体机(比如数据库和存储的一体机)

    历史上是两个设备,后来整合到一个设备,以减少执行时间

    4. 采用专用设备

    采用低延时网卡缩短网络延时

    1000M网卡延时为40-100us,

    10G网卡延时为15us,

    专业的低延时网卡为2.0-4.3us。

    5. 采用新技术

    例如

    机械磁盘换为SSD

    磁盘换为非易失性内存(这个算比较新的硬件,所以现在用的没那么普遍)

    6. 亲和性

    a)CPU亲和性:

    a.1 进程绑定CPU,让一个进程只跑在一个固定的物理CPU上。这样可以进程数据在不同CPU之间的上下文切换。

    a.2 使进程数据在CPU cache当中持续存在,定时发送指令,做数据保持。

    b)网络亲和性:在有多条网络路径、存储路径的情况下,主动选择速度较快的链路。

    上述一些方法(如取消备份机制、数据不落盘等等)会降低系统的可靠性,出现丢数据的可能,在应用时,需要采用额外的补偿机制(比如日终对账的方式)来找补错误,这种补偿机制是另一个系统/服务器来实现。另外,要帮助用户知晓、理解和承担交易失败导致的风险。

    阅读原文

  • 相关阅读:
    office365离线安装
    c#使用emit方法DB,实体相互转换
    c#采用emit将DataTable转List
    c#将List转换成DataTable
    c#将List转换成DataTable(采用Emit)
    聊聊编程开发的数据库批量插入(sql)
    c#随便聊聊数据库操作
    c#聊聊文件数据库kv
    WPF几个样式
    c#(IronPython)调用Python方法
  • 原文地址:https://www.cnblogs.com/wyf0518/p/12107131.html
Copyright © 2011-2022 走看看