---
title: Location Cache 问题排查-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 Location Cache 问题排查相关的常见问题和使用技巧，帮助您快速解决 Location Cache 问题排查的难题。
---
切换语言

- 简体中文
- English

划线反馈

# Location Cache 问题排查

更新时间：2024-06-17 03:21

适用版本： V3.2.x、V3.1.x、V2.2.x、V2.1.x、V1.4.x 内容类型：Troubleshoot  

## 前置条件

在开始排查前，请明确以下信息：

1. 确认具体出现问题的 server ？
 2. 确认具体什么时间点出现的问题 ？
 3. 确认有问题的 PKey，即 `table_id` 和 `partition_id` 的具体值。

## 适用版本

OceanBase 数据库 V3.2.X 及之前的版本。

## 排查步骤

1. 排查主副本是否上任或无主。 执行如下命令，查看副本是否有主以及 leader 所在机器、上任时间。

   ```shell
   select * from __all_virtual_clog_stat where table_id=xxx and partition_idx=xxx

   ```

   #### 说明

   若虚拟表不可查，可以用 PKey 去 election.log 日志文件中查询，确认那段时间是否发生无主选举（leader revoke）或者有主改选（leader changed），确认 leader 是否上任（on_leader_takeover），确认 leader 是谁。
 2. 确认 leader 是否汇报。

      1. 执行如下命令，查看副本何时汇报到 `meta` 表中。如果 `__all_virtual_meta_table` 表中查不到，可以查 `__all_root_table` 表。

        ```shell
        select * from __all_virtual_meta_table where table_id=xxx and partition_id=xxx;

        ```
      2. 若查询不到结果，通过 `grep` 命令在 observer.log 中搜索相关日志，找到最早 role 为 1，且不为 [Y0-0000000000000000] 的 `trace_id`。(`table_id`，`partition_id` 替换为具体数值)。

        ```shell
        grep "fill partition replica.*_table_id_.*_partition_id_" observer.log

        ```
      3. 若找不到上述日志，根据 table_id 分析是系统表还是用户表。若 pure_id < 10000 为系统表，否则为用户表。 计算公式如下：

        ```shell
        pure_id = table_id & (~(0xFFFFFFFFFFFFFFFF<<40))

        ```

             - 若是系统表，执行如下命令。

              ```sql
              grep "insert into __all_root_table.*_table_id_.*_partition_id_" observer.log

              ```
             - 若是用户表，执行如下命令。

              ```sql
              grep "insert into __all_tenant_meta_table.*_table_id_.*_partition_id_" observer.log

              ```

        用户表（V1.4.x 版本将 `__all_tenant_meta_table` 改为 `__all_meta_table`。）

        ```shell
        grep "insert into __all_tenant_meta_table.*_table_id_.*_partition_id_" observer.log

        ```
      4. 展开 `trace_id` 查看汇报是否成功。若汇报未成功，找到下一个满足条件的 `trace_id`，直至找到最早的汇报成功日志，确定汇报成功的时间点。若汇报一直重试并报错，需根据错误码排查 `inner_sql` 失败的问题。
 3. 确认 location_cache 刷新。

      1. 执行如下命令，可以找到目标 partition 的 location_cache 刷新日志。

        ```sql
        grep "partition_location_cache.*table_id.*partition_id" observer.log/rootservice.log

        ```
      2. RPC 刷新日志会被限流及限频次，一般认为 RPC 刷新没报错就是成功的。
      3. 若 RPC 刷新失败，会走 SQL 刷新 location_cache，故同一个 `trace_id` 可以先忽略 RPC 刷新失败的报错，看最终 location_cache 是否通过 `inner_sql` 刷新成功。

若按照流程排查无果，可联系技术支持进一步定位问题原因。

Previous

[REPEATABLE READ 问题汇总](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000906441)

Next

[pz_value unexpected(ret=-4016 问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000899693) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
