你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Cosmos DB for Apache Cassandra 的服务器诊断
适用于: Cassandra
Log Analytics 是 Azure 门户中的一种工具,可帮助你在适用于 Cassandra 的 API 帐户上运行服务器诊断。 从 Azure Monitor 日志收集的数据运行日志查询,以交互方式分析其结果。 从 Log Analytics 查询检索的记录有助于提供对数据的各种见解。
先决条件
- 创建 Log Analytics 工作区。
- 创建诊断设置。
- 在适用于 Cassandra 的 API 帐户上启动日志分析。
使用 Log Analytics
完成 Log Analytics 设置后,可以开始浏览日志以获得更多见解。
审核数据平面操作
使用 CDBCassandraRequests 表查看专用于你的适用于 Cassandra 的 API 帐户的数据平面操作。 一个示例查询,用于查看 topN (10 个) 使用请求,并获取有关每个请求的详细信息。
CDBCassandraRequests
| where RequestCharge > 0
| project DatabaseName, CollectionName, DurationMs, OperationName, ActivityId, ErrorCode, RequestCharge, PIICommandText
| order by RequestCharge
| take 10
错误代码和可能的解决方案
状态代码 | 错误代码 | 说明 |
---|---|---|
200 | -1 | 成功 |
400 | 8704 | 查询正确,但语法无效。 |
400 | 8192 | 提交的查询有语法错误。 检查查询。 |
400 | 8960 | 由于某些配置问题,查询无效。 |
401 | 8448 | 登录的用户没有执行查询的正确权限。 |
403 | 8448 | 禁止响应,因为用户可能没有执行请求所需的权限。 |
404 | 5376 | 由于找不到响应,写入请求期间出现非超时异常。 |
405 | 0 | 服务器端 Cassandra 错误。 错误很少发生,请打开支持票证。 |
408 | 4608 | 读取请求期间超时。 |
408 | 4352 | 写入 serviceRequest 期间出现超时异常。 |
409 | 9216 | 尝试创建已存在的键空间或表。 |
412 | 5376 | 不满足前提条件。 为了确保数据完整性,我们确保基于读取响应的写入请求为 true。 已返回非超时写入请求异常。 |
413 | 5376 | 写入请求期间出现此非超时异常的原因是有效负载可能太大。 目前,每行限制为 2MB。 |
417 | 9472 | 当准备的语句未缓存在服务器节点上时,将引发异常。 它应该是暂时性的/非阻塞的。 |
423 | 5376 | 由于当前正在处理写入请求,因此存在锁定。 |
429 | 4097 | 重载异常是 RU 不足或请求速率过高的结果。 可能需要更多的 RU 来处理较高的卷请求。 在本机 Cassandra 中,这可以解释为其中一个没有足够 CPU 的VM。 建议查看当前数据模型,以确保没有可能导致热分区的过度倾斜。 |
449 | 5376 | 并发执行异常。 出现这种情况是为了确保一次只对给定行执行一次写入更新。 |
500 | 0 | 服务器 cassandraError:发生了意外情况。 这表示服务器端 bug。 |
503 | 4096 | 服务不可用。 |
256 | 这可能是由于连接凭据无效。 请检查连接凭据。 | |
10 | 客户端消息触发了协议冲突。 例如,在发送启动消息之前发送的查询消息。 |
排查查询消耗问题
CDBPartitionKeyRUConsumption 表包含有关每个物理分区内每个区域中逻辑键的请求单位 (RU) 消耗的详细信息。
CDBPartitionKeyRUConsumption
| summarize sum(todouble(RequestCharge)) by PartitionKey, PartitionKeyRangeId
| render columnchart
探索控制平面操作
CBDControlPlaneRequests 表包含有关控制平面操作的详细信息,特别是针对适用于 Cassandra 的 API 帐户。
CDBControlPlaneRequests
| where TimeGenerated > now(-6h)
| where ApiKind == "Cassandra"
| where OperationName in ("Create", "Upsert", "Delete", "Execute")
| summarize by OperationName