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

网站招牌模板cms网站模板套用教程

网站招牌模板,cms网站模板套用教程,wordpress 外贸插件,网站维护一年多少费背景 对于慢SQL相信大家都不陌生了,一旦遇到后,相信大家会很快的提供出来对应的优化方法、索引优化建议工具使用等等,对于此我相信大家已经熟悉的不能再熟悉了,但是比较不尽人意的是:在此之前我们往往是花费了大量时间才发现造成系统出现问题的是慢SQL引起的,风险自然而…背景 对于慢SQL相信大家都不陌生了,一旦遇到后,相信大家会很快的提供出来对应的优化方法、索引优化建议工具使用等等,对于此我相信大家已经熟悉的不能再熟悉了,但是比较不尽人意的是:在此之前我们往往是花费了大量时间才发现造成系统出现问题的是慢SQL引起的,风险自然而然地也就慢慢升高了,基于此开发了一款简易的慢SQL自定义告警组件,为的就是提前预警,在影响扩大化之前进行快速止损,甚至是在一些新业务在上线前(测试、预发布)提前发现风险并规避 原理简介 通过mybatis拦截器进行sql语句执行过程的拦截,同步执行过程中计算sql执行的时间,当实际执行时间大于指定的配置阈值时发出告警信息并打印日志(日志中带有详细的调用链信息方便快速定位调用源头),同时将对应的sql放入异步队列disruptorQueue中,异步分析sql的执行计划,这里主要做3中场景预警 1.出现不走索引的全表扫描场景 2.没有走索引 3.扫描数据量超过配置阈值 关键代码 1、Mybatis拦截器实现执行时间超时预警以及放入异步队列 自定义一个类实现接口org.apache.ibatis.plugin.Interceptor,增加上官方提供的注解@Intercepts,这里主要介绍几个细节,具体关键代码如下 ◦同步执行逻辑中根据sql的实际执行时间判断是否进行预警 ◦预警日志中打印出具体的调用链堆栈信息 ◦同一条sql在同一天最多只预警一次 ◦具体sql的explain分析以及预警放在异步执行 ◦开放子类可覆盖方法自行实现个性逻辑:比如mybatic-Plus的多数据源支持 /*** 数据库操作性能拦截器,记录耗时* @Intercepts定义Signature数组,因此可以拦截多个,但是只能拦截类型为:* Executor* ParameterHandler* StatementHandler* ResultSetHandler*/ @Slf4j @Component @Intercepts(value = {@Signature(type=Executor.class,method="query",args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class,CacheKey.class,BoundSql.class}),@Signature(type=Executor.class,method="query",args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class})}) public class SqlInterceptor implements Interceptor {/*** 判定sql执行超时的时间标准,单位毫秒*/private final int DEFAULST_TIMEOUT = 1000;/*** sql最大扫描行数*/private final int DEFAULT_MAX_SCANROWS = 50000;/*** 每秒sql入队的最大限制*/private final double SQL_PERMITS_PERSECOND = 10.0;/*** 同一个sql在redis中的过期时间*/private final Long DEFAULT_REDIS_TIME = 24 * 60 *60L;/*** 分析sql阈值告警默认时间 单位:毫秒*/private final Long DEFAULT_EXPLAIN_ALERM_TIME = 0L;/*** 缓存时间 单位:秒*/private Long redisTime;/*** 分析sql阈值告警时间 单位:毫秒*/private Long explainAlermTime;/*** 限流器*/private RateLimiter rateLimiter = RateLimiter.create(SQL_PERMITS_PERSECOND,3*60, TimeUnit.SECONDS);private String appCode;private String appName;private String appStackBasePackage;private String dataSourceId;private String redisClientId;private Cluster redisClient;private DataSource dataSource;private String dbName;private JdbcTemplate jdbcTemplate;private Integer maxScanRows;private Integer sqlTimeout;private Boolean explainSwitch;protected final MapString,JdbcTemplate jdbcTemplateMap = new ConcurrentHashMap();/*** 初始jdbcTemplateMap,可由子类实现*/public void initjdbcTemplateMap(){}/*** 实现拦截的地方* @param invocation* @return* @throws Throwable*/@Overridepublic Object intercept(Invocation invocation) throws Throwable {Object target = invocation.getTarget();Method method = invocation.getMethod();Object result = null;if (target instanceof Executor) {long start = System.currentTimeMillis();/**执行方法*/try{result = invocation.proceed();long end = System.currentTimeMillis();long executeTime = end-start;log.debug("sql性能监控-execute-target:{}毫秒",executeTime);this.doTimeOutSql(invocation, executeTime);}catch (Throwable var1) {long end = System.currentTimeMillis();long executeTime = end-start;String logId = UUID.randomUUID().toString();this.businessAlarmError(invocation, executeTime, logId);throw new RuntimeException("sql性能监控-调用原始方法出错:logId=" + logId + ",方法:" + method, var1);}}return result;}/*** Plugin.wrap生成拦截代理对象* @param target* @return*/@Overridepublic Object plugin(Object target) {return Plugin.wrap(target, this);}@Overridepublic void setProperties(Properties properties) {}/*** 处理超时SQL* 1.超时自定义报警* 2.超时入redis慢SQL队列* @param invocation*/private void doTimeOutSql(Invocation invocation,long executeTime){long startTime = System.currentTimeMillis();String preSql = "";try{SqlEventInfo sqlEventInfo = this.getRealSqlInfo(invocation, executeTime);preSql = sqlEventInfo.getPreSql();//自定义告警ListStackTraceElement pivotalStackTraces = getPivotalStackTraces();sqlEventInfo.setPivotalStackTraces(pivotalStackTraces);if(executeTime - getSqlTimeout() 0){StringBuffer alermKeyBuf = new StringBuffer();alermKeyBuf.append(this.appCode).append(".").append(SqlAlermEnum.SQL_ALERM_KEY.getDesc());
http://www.tj-hxxt.cn/news/230850.html

相关文章:

  • 单页营销分享网站怎么免费安装dw
  • 手机上怎么查看网站设计钻井网站建设
  • 商务网站建设数据处理石景山网站建设公司哪个好
  • 做一份网站的步zou青浦做网站公司
  • 查询网站建立时间如何通过做网站和公众号盈利
  • wordpress 分类置顶临淄关键词网站优化哪家好
  • 宠物托运网站开发wordpress漂浮框
  • 茂名网站建设教wordpress主题 手机版
  • 凡科网免费网站怎么样淘宝api接口实现wordpress
  • 网站开发摊销多少年dede模板 展柜网站源码
  • 漳州市网站建设网站建设模块需求
  • 和动物做的网站网站设计与网页制作团队
  • 深圳网站开发团队app快速开发平台
  • 网站建设的结论和体会seo标题优化裤子关键词
  • 虚拟主机如何建设多个网站网站建设的书籍有哪些
  • 上海市网站建设电话号码网站备案个人好还是企业好
  • 网站建设费与无形资产重庆秀山网站建设报价
  • photoshop软件宁波seo怎么做优化公司
  • 商城网站建设教学中文安卓app开发工具
  • 网站左侧的导航是怎么做的wordlink网站开发
  • wap建站程序免费下载推广软件
  • 安徽观元建设有限公司网站如何编写微信小程序代码
  • 有了服务器怎么做网站外贸seo培训
  • 网站开发平台的公司网站备案被注销
  • 网站更改常州百度推广排名优化
  • 中国最权威的网站排名潜山做网站
  • flash网站源码下载wordpress表单留言功能
  • 如何制作自己的网站 可放广告orchard wordpress
  • 北京城建十建设工程有限公司网站想学会网站建设要会什么
  • 红酒网站建设模板关键词推广seo怎么优化