1、问题描述

从4月17号下午5时起,至18号晚9点,客户单位部分通过ArcGIS Server发布的地图服务(该部分地图服务的数据源为数据库SJZX)无法加载浏览,表现为长时间无响应。同时,通过ArcMap加载数据库中的要素类时,表现为"卡死",并长久无响应。

2、问题观察

通过收集该时间段内某1小时之间的性能数据,得到其耗时排名前6的SQL如下:

发现SQL ID 为gj2c1wk1brmaa 和 bxqcnpc5q5330 的两个SQL,其在1个小时的跨度内,执行次数为0。这说明,在这1个小时之内,该SQL一直在执行,且没有结束。SQL ID为bxqcnpc5q5330的SQL执行时间为3624秒,接近完整的1小时(3600s);SQL ID为gj2c1wk1brmaa的SQL执行时间为271786秒,这说明有271786/3600=75个进程在执行这个操作,且持续1小时未结束。

继续观察,发现这两个SQL都与TABLE_LOCKS表有关,SQL ID为bxqcnpc5q5330的SQL在执行时需要获得该表的排它锁;SQL ID为gj2c1wk1brmaa的SQL在执行时需要获得该表的共享锁(即TM锁)。猜测,这两条SQL长时间未执行结束,其根本原因在于无法获得其所需要的锁,即TABLE_LOCKS上发生了锁的阻塞。

3、问题分析

SQL ID为bxqcnpc5q5330的SQL需要获得排它锁,它可能被其它的排它锁或共享锁(TM锁)阻塞。

SQL ID为gj2c1wk1brmaa的SQL对TABLE_LOCKS表中的记录进行删除操作,需要获得该表的共享锁(TM锁),它可能被排它锁阻塞。

我们作两种假设:

1)TABLE_LOCKS上已经有其它的排它锁

这时候,符合bxqcnpc5q5330、gj2c1wk1brmaa两个SQL的表现。但排名前6的SQL中,还有cffvq2hst53md、00xnu55uqdns0、3ub7rzsp3rpyh 三个SQL有成功执行的次数(这三个SQL分别是向TABLE_LOCKS表中增加记录、获得TABLE_LOCKS的共享锁、根据PID(进程ID)删除TABLE_LOCKS表中记录),如果TABLE_LOCKS上已经有其它的排它锁,这几个SQL也会被阻塞,不可能执行成功。因此TABLE_LOCKS上已经有其它的排它锁的假设不成立。

2)TABLE_LOCKS上有未释放的共享锁(TM锁)

这时侯,TABLE_LOCKS上的共享锁(TM锁)会阻塞bxqcnpc5q5330 SQL,但bxqcnpc5q5330 SQL之前的共享锁(TM锁)请求不会被阻塞(包括cffvq2hst53md、00xnu55uqdns0、3ub7rzsp3rpyh),bxqcnpc5q5330 SQL之后的共享锁(TM锁)请求会被bxqcnpc5q5330 SQL的排它锁请求阻塞(尽管bxqcnpc5q5330 SQL还没有真正获得到锁,但它在锁的队列中会阻塞发生在它之后的SQL)。因此,该假设符合目前观察到的现象。

4、现象模拟再现

根据上述问题分析结果,我们可以基于假设条件进行现象模拟再现。

1)TABLE_LOCKS上有未释放的共享锁(TM锁)

当对TABLE_LOCKS执行了新增、删除、更新操作,但未提交事务时(有可能是事务异常结束),共享锁(TM锁)将不会释放。

2)对TABLE_LOCKS请求排它锁

当使用ARCMAP、ARCCATALOG对database connection中的对象(包括要素类、要素集、表等)进行删除操作时,会请求排它锁。

该会话请求的锁模式为6,即排它锁。

已经开始出现"卡死"并长时间无影响的现象。

3)对TABLE_LOCKS请求共享锁

通过ARCMAP、ARCCATALOG加载图层时,需要向TABLE_LOCKS中增加1条记录,此时需要请求TABLE_LOCKS表上的共享锁。

此时加载图层已被阻塞。

4)释放第1)步中的共享锁(TM锁)

所有的阻塞都迎刃而解了。

ArcGIS Server浏览地图服务无响应原因分析说明的更多相关文章

  1. ArcGIS Server SOE地图服务重启特别卡

    ArcGIS Server 服务器端扩展,SOE代码调试时,需要经常重新编译.替换地图服务中的扩展, 由于未知问题,本地开发环境包含SOE的地图服务,每次重启都需要耗费相当长的时间,大体上20多分钟, ...

  2. ArcGis server发布地图服务

    ArcGIS server发布服务: 首先修改地图文档属性中的关联默认数据库 最后使用分享将地图服务发布到server上,是地图服务可以使用: 注意一定要勾选 Feature Access选项 fea ...

  3. tomcat服务无响应堆栈分析

    tomcat服务突然无响应了,导出内存堆栈和线程堆栈,分析后发现是同步锁使用不合理导致的. [root@prd-dtb-web-01 ~]# [root@prd-dtb-web-01 ~]# jmap ...

  4. 一次Mysql连接池卡死导致服务无响应问题分析(.Net Mysql.Data 6.9.9)

    问题: 进程启动后,线程数迅速上升至最小线程数后,缓慢上升(线程池限制)到数千,然后由于线程过多,CPU飙升到90%. 对外表现为Api无响应或连接超时. 背景 有些数据存在于另一个机房,通过内网专线 ...

  5. cloudstack下libvirtd服务无响应问题

    在cloudstack4.5.2版本下,偶尔出现libvirtd服务无响应的情况,导致virsh命令无法使用,同时伴随cloudstack master丢失该slave主机连接的情况.最初怀疑是lib ...

  6. 重写TiledServiceLayer实现Arcgis访问Mapabc地图服务 (转载)

    package com.baixin.main;/** *  * @ClassName:   MapAbcToArcGISTLayer * @Description:    ArcGIS访问MapAb ...

  7. JavaWeb和WebGIS学习笔记(六)——使用ArcGIS for Server发布地图服务

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  8. ArcGIS pro 发布地图服务(一)动态地图服务

    1.软件:arcgis pro 2.4  数据:.mxd文档. 2.导入mxd文档. 3.登录portal账号 4.分析—发布 5.在server中的地图服务 JavaScript api 查看 6. ...

  9. C#中winform下利用ArcEngine调用ArcGIS Server发布的服务 AE 10

    开发环境:vs2010 + AE 10 测试 public Form1() { ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engi ...

随机推荐

  1. 我是如何一步步编码完成万仓网ERP系统的(十一)产品库设计 7.发布商品

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  2. Asp.net MVC企业级开发(09)---T4模板

    T4即为Text Template Transformation Toolkit,一种可以由自己去自定义规则的代码生成器.根据业务模型可生成任何形式的文本文件或供程序调用的字符串 在VS中T4模板是没 ...

  3. 通用高效字符串匹配--Sunday算法

    字符串匹配(查找)算法是一类重要的字符串算法(String Algorithm).有两个字符串, 长度为m的haystack(查找串)和长度为n的needle(模式串), 它们构造自同一个有限的字母表 ...

  4. python排序 基数排序

    算法思想 基数排序通过按位比较(一般从最低位开始)将元素按照最低位的数放到10个桶中,当所有的元素都这样被处理一次后,在按从0到9的顺序将每个桶的元素再取出来(不关注其他位的,只关注当前位的)这样就完 ...

  5. join 和子查询优化

    一次在家查看数据的时候,列表展示特别慢,就查看了一下,把sql语句拿出来运行居然要4,5秒,当时就感觉有问题,语句用的join链接2个表,感觉没啥错误,为啥会这么慢,然后改用了子查询链接,发现快了许多 ...

  6. iOS11里判断Safari浏览器是无痕模式还是正常模式?

    var isPrivate = false; try { window.openDatabase(null, null, null, null); } catch (_) { isPrivate = ...

  7. linux 忘记mysql用户root密码 解决方案

    1.vim /etc/my.cnf[mysqld]skip-grant-tables ##追加此行,跳过权限表, 2.重启mysqlsystemctl restart mysqld 3.mysql 登 ...

  8. vue + yarn 创建项目

    前期准备工作node,npm,vue,yarn等环境要准备好 1.命令行vue init webpack myproject 2.使用vs code打开项目文件夹, vs终端运行一下yarn 3.添加 ...

  9. Spark GraphX图计算简单案例【代码实现,源码分析】

    一.简介 参考:https://www.cnblogs.com/yszd/p/10186556.html 二.代码实现 package big.data.analyse.graphx import o ...

  10. flask项目结构

    project/ app/ # 整个程序的包目录 static/ # 静态资源文件 js/ # JS脚本 css/ # 样式表 img/ # 图片 favicon.ico # 网站图标 templat ...