PlanetScaleからデータを取得する時に出るこのエラーの原因と解決方法この記事で解説します。
Error:
Invalid `prisma.post.findMany()` invocation:
Error occurred during query execution:
ConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(Server(ServerError { code: 1105, message: "target: post.-.primary: vttablet: rpc error: code = Aborted desc = Row count exceeded 100000 (CallerID: x319apmjisyi4914cih6)", state: "HY000" })), transient: false })
目次
エラーの原因
PlanetScaleにはこれらの制限があります。
PlanetScaleは、長時間実行されるクエリーやトランザクションを防ぐために、いくつかのシステム制限を導入しています:
利用可能なリソースをすべて積み上げ、消費してしまう。
https://planetscale.com/docs/reference/planetscale-system-limits#query-limits
他の重要で短時間のクエリやトランザクションの完了をブロックしてしまう。
再起動しないと復旧できないほどデータベースに負荷がかかる。
計画的なフェイルオーバーや重要なアップグレードが妨げられる。
これらの制限は具体的に以下の様に設定されています。
Type | Limit |
---|---|
Per-query row | 100k |
Per-query DML timeout | 30s |
Per-query SELECT timeout | 30s |
Per-transaction timeout | 20s |
今回のエラーはPer-query rowの10万件の制限に引っかかっています。
PlanetScale system limits
Learn about system limits that PlanetScale puts in place to protect your database.
エラー・制限の回避方法
ページネーションなどで、大きなクエリを分割
10万件以上のレコードを返すクエリがある場合はページネーションなどで、小さなクエリに分割することでデータを取得することができます。
OLAPモードを利用する
公式では推奨方法となっていませんが、OLAPモードで10万件のデータを取得する事ができます。
OLAPモードはPlaneScaleのコンソールで以下の様にworkload
をolap
にすることでOLAPモードで利用することができます。
mysql> set workload=olap;
PlanetScale system limits
Learn about system limits that PlanetScale puts in place to protect your database.
コメント