💻

JawsDBやClearDBの無料プランはmax_questionsが設定されていて本番利用にはちょっと不安だよという話

2020/02/02に公開

こんにちは、たつきちです。

HerokuでMySQLを使う場合、Herkou Add-on である JawsDB または ClearDB を使うのがデファクトスタンダードになっていると思います。

僕も、まさにこのブログのインフラとして使っていたんですが、ちょっと 本番運用に使うには不安な仕様 を今さら知ったので、Herokuを使いつつデータベースだけ Amazon RDS に移行しました。

この記事ではそのことについてまとめておきます。

max_questions が制限されている

いきなり結論ですが、JawsDBもClearDBも、発行されるDBユーザーに max_questions が設定される仕様になっており、これが本番運用には不安と考えた理由です。

max_questions は、 1時間あたりに実行可能なクエリの数 を制限する設定です。

上限に達したら1時間データベースが使えなくなる

1時間の間にこれを超える数のクエリを投げてしまうと、 そこから1時間、データベースがまったくクエリを受け付けてくれなくなります 😱

具体的には、すべてのクエリに対してMySQLが以下のようなエラーを返すようになります。

1226 - User 'xxx' has exceeded the 'max_user_connections' resource (current value: 3600)

3600の部分が、 max_questions に設定されている上限数です。

僕の場合は、WordPressで記事をめっちゃ更新してたら上限に達しました。

WordPressの場合、上限に達すると「データベースに接続はできるけどクエリは成功しない」という状態になるため、サイトを開こうとすると WordPressのインストール画面が表示されるようになります。 (もちろんインストールはできず、送信ボタンを押すとエラーになる感じです)

JawsDB / ClearDB それぞれの仕様

max_questions が設定されているということ自体はJawsDBもClearDBもちゃんとドキュメントに明記されていました。

JawsDB

https://devcenter.heroku.com/articles/jawsdb#i-am-getting-an-error-saying-i-have-exceeded-the-max_questions-resource-what-is-that

I am getting an error saying I have exceeded the 'max_questions’ resource. What is that?
The 'max_questions’ value is a limit that is placed on shared plan accounts to help preserve computing power for other shared plan users on the same server. It is essentially a limit on the number of queries that can be executed from that account in an hour. After 1 hour of reaching the limit, the limit will be reset and queries can again be executed.

要約すると、「sharedプランの場合は他のユーザーに迷惑がかからないように max_questions を設定してありますよ」ということですね。

「sharedプラン」というのは、JawsDBの料金プラン のうち Shared と書かれている先頭の3つのことでしょう。

具体的な上限値はドキュメントには書かれていませんが、僕が実際に体験したケースだと、 無料プランで上限値3600 でした。有料プランにすると上限が緩和されるのかどうかは不明です。

ClearDB

https://w2.cleardb.net/faqs/#multi_7

I’m getting an error message saying that I have exceeded the ‘max_questions’ resource for my database. What can I do?
The max_questions resource is defined by how many queries you may issue to your database in an hour. Our free plans start with 3,600 queries per hour and increase to 18,000 upon purchasing a paid plan with us. Larger plans have larger QPH limits. We recommend that you upgrade your database with us to lift this limitation off of your database.

こちらは上限値が明記されていますね。

無料プランでは3600、プランを上げれば最大18000まで増えます、とのことです。

まとめ

  • JawsDBもClearDBも、多くの手頃なプランでは max_questions が設定されている
  • その上限値は、WordPressを更新しまくる程度で達しうるぐらいの数値
  • 「最悪の場合1時間ダウンする」というのが許容できないサイトでは使うのを避けたほうがいいかも
  • そもそも無料プランだと容量5MBとめちゃ少ないので結局遅かれ早かれまともなマネージドサービスを使うしかなくなる
GitHubで編集を提案

Discussion