
# 长查询执行期间大量并发更新偶现写入性能下降
#### 问题现象
执行全表扫描类型的长查询，扫描期间页面发生大量并发更新，部分DML写入性能较没有长查询时出现性能下降。
#### 问题分析
对于全表扫描场景下的长查询（例如持续两小时以上），在扫描到某个页面前，该页面发生大量集中并发更新（例如十万次以上更新），后续扫描到该页面时，需要访问大量历史版本获取可见元组（MVCC机制），由于单页扫描期间持有页面读锁，若此时刚好需要写入该页面，写入会被阻塞，直到页面元组读取完成。
#### 定位手段
1. 结合慢SQL告警、statement_history视图等确认是否存在长查询和超时取消的DML语句。
2. 获取[1]statement_history中查询到的被取消DML的details信息，使用statement_detail_decode系统函数解析details字段，获取等待事件，如等待事件开销占比最高为BufferContentLock则大概率为本问题。
 
#### 处理方法
事前预防：避免在高并发表上执行全表扫描类型长查询，建议长查询迁移到备机执行。
事中处理：结合慢SQL告警等确认是否触发此场景，可通过中断长查询避免对业务的持续影响。
