利用取消机制缓解后台的查询性能瓶颈

Posted lhbshg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用取消机制缓解后台的查询性能瓶颈相关的知识,希望对你有一定的参考价值。


内容:
利用取消机制缓解后台的查询性能瓶颈,核心在WebAPI查询方法体内关注CancellationToken并适时取消异步任务, 这将大大提高应用的响应能力。

场景优化:
1.网络交互 不按超时时间的 【高并发场景下 受CPU 时间片切换到时的超时操作不按设定时间执行】偶发小概率事件
2.浏览器访问情况下、适用于 APP取消或者网路中断
1.F5刷新 2.转向其他页面 3.浏览请求被终止

注意:适用某些长查询或者高并发下任务堆积情况下的取消或熔断

处理方案 取消令牌
1.httpclient 三方交互 如极光、大汉、es、权重服务、微信等网络交互的 超时方式
示例:
CancellationTokenSource cs = new CancellationTokenSource();
if (timeOut > 0)
{
cs.CancelAfter(timeOut);
}
var response = await http.SendAsync(httpRequestMessage,cs.Token);

 

2.webapi Http 用户请求取消,终端等

注入:
private readonly IHttpContextAccessor _httpContextAccessor;

//网络请求示例
var ct = _httpContextAccessor.HttpContext?.RequestAborted ?? default(System.Threading.CancellationToken) ;
return await client.RequestPasswordTokenAsync(clientRequest,cancellationToken:ct);


3.ORM dapper 示例 数据库长度

CancellationTokenSource cs = new CancellationTokenSource();
cs.CancelAfter(1000);

var id = (await conn.QueryAsync<int>(
new CommandDefinition(sqlStr, cancellationToken: cs.Token)
)).FirstOrDefault();


注入:
private readonly IHttpContextAccessor _httpContextAccessor;

var ct = _httpContextAccessor.HttpContext?.RequestAborted ?? default(System.Threading.CancellationToken) ;

var id = (await conn.QueryAsync<int>(
new CommandDefinition(sqlStr, cancellationToken: ct)
)).FirstOrDefault();

以上是关于利用取消机制缓解后台的查询性能瓶颈的主要内容,如果未能解决你的问题,请参考以下文章

性能测试-服务端瓶颈分析思路

Linux性能优化的全景指南

系统应用监控的缜密思路,堪称性能瓶颈的克星

为啥向这个 MySQL 查询添加特定的 where 子句会成为性能瓶颈?

使用匿名函数瓶颈提高 matlab 代码的性能

突破性能瓶颈!ElasticSearch百亿级数据检索优化案例