内部構造から理解するMySQL」をWeb掲載用に再編集したものです。データの操作がイメージできれば誰でもできる』が2019年8月26日に発売されました。本記事と併せてご活用ください。RDBMSで検討すべきパラメータとは前回は,非常に大まかにRDBMSの構造についてお話ししました。これまでの構造で考慮していない部分があったら,いくつかのパラメータの内,見直すべきものがあると理解できたのではないでしょうか。いえ,ゲームの種類によって要件はまったく違いますから,確実に「こうすれば良い」というパラメータ設計はありません。要件に応じて,確認・検討すべきおもなパラメータとお考えください。詳しくは,設定ファイル(my.cnf)についてマニュアルなどで確認しましょう。ページサイズについてMySQL(InnoDB)では,デフォルトのページサイズは16KB注1で,ほかに8KBと,4KBを選ぶことができます。Processing)型と呼ばれるタイプのシステムになり,通常,1ユーザのデータに対して読み書きすることが多い,つまり,細かいデータアクセスが多くなるシステムです。そのようなシステムの場合,小さいページサイズのほうが有利な可能性が高いです。RDSなどの共用インスタンスはほとんど16KBで変更ができません。小さいページサイズには,もちろんデメリットもあります。それは,小さいページサイズにすると利用されない空白が多くなるということです。平均のレコード長(TEXT,BLOBなどのデータ型は別ページに保存されるのでそれ以外で)が2,500Byteで,ページサイズが4KBのものを選ぶと,1ページにほぼ1レコードしか保存できず,メモリまたはHDDの37.5%が空白のまま利用されないということになります。逆に,ページサイズが大きいほど,データが細密に充填されメモリやHDDの利用効率が上がりますから,大量のデータを読み込み集計をするような処理に向いています。ページサイズは検討されずにデフォルトのまま利用されていることが多いですが,非常にパフォーマンスに影響するためよく検討してください。ログファイルのサイズゲーム系ではイベントやキャンペーン時にアクセスが集中します。アクセスの集中時にログファイルが溢れて,HDDへのフラッシュ(実データの書き込み)が大量に起きると,サーバの負荷は一気に高まります。イベントやキャンペーン時に乗り切れるサイズを検証し設定しましょう。ログファイルへの書き込みタイミングたとえば,イベントやキャンペーン時には,1秒間に数万回という書き込みが発生することがあり,ログファイルを大きくして,HDDへのフラッシュが起きないように設定しても高負荷になることがあります。そのようなときには,「⁠innodb_flush_log_at_trx_commit」というパラメータを2に設定して,ログファイルへの書き込みタイミングを1秒に1回にすることでHDDへの書き込みの負荷を減らすことができます(デフォルトのパラメータは1でコミットごとの書き込みになっています⁠)⁠。HDDへは二重に遅延書き込みを行うことになり,最大で1秒間に更新されたデータがロストする可能性もあります。最近のネットゲームでは図1のように,「⁠RDBMSへの書き込みはバトル終了時に一度行う」というゲームも増えているようです。ネットゲームの書き込み処理このようなゲームでは,RDBMSと,クライアントやAPサーバ間でデータの不整合が常に起きている状態で運用されているため,ユーザからみれば,障害が起きたときには数十秒から数分のロールバックが起きるので,ログファイルへの書き込みを1秒に1回にしてもユーザ価値は大きく変わらないと考えられます。2」という設定値も検討されたら良いでしょう。1」で設定した別のデータベースで行い,コミットされたデータのロストを防ぎましょう。2」として,ログファイルへの書き込みタイミングを1秒に1回とする場合,ログバッファサイズはこれまでより大きく設定する必要があります。2」にする意味がなくなりますから,1秒間に書き込まれるログが十分に入るだけのサイズを設定してください。各ワークメモリ(スレッドバッファ)サイズセッション単位で利用されるワークメモリのサイズです。設定値と最大の同時接続数との掛け算が最大の使用量となりますので,割り当て過ぎに注意しましょう。各処理が行える量以上に割り当てないようにしましょう。データバッファサイズ「⁠innodb_buffer_pool_size」というパラメータで調整します。これは,チューニングの基本とされるパラメータで,できる限り大きくとってください。「⁠物理メモリの8割を目安に」などとされていることが多いですが,メモリの増減が簡単なクラウドサービスを利用していれば8割という数値に意味がありません。目安になる数値としては,「⁠キャッシュヒット率」が良いでしょう。ゲームに限らずデータベースを長く運営しているとデータが増え,キャッシュヒット率が下がる傾向にありますから,目標とするキャッシュヒット率になるように設定値を定期的に見直してください。業務系では,95〜99%を目標値として調整することが多いですが,目標値はゲーム(システム)によって違ってきます。一連のチューニングを終えて,満足できるパフォーマンスが出ている時点のキャッシュヒット率を目標値とするとパフォーマンスを維持しやすいでしょう。物理メモリを増やしても,「⁠パラメータを修正しない限り増やしたメモリは利用されない」ということにくれぐれも注意しましょう。フリーランスのエンジニアを経て,2003年に株式会社ジーワンシステムを創業する。その後,プレイングマネージャーとして多くのシステム開発に従事し,現在ではデータベースを中心としたコンサルティングを行っている。データの操作がイメージできれば誰でもできる本書は,SQLの文法は学んだもののSQLに苦手意識を持っているITエンジニアのための書籍です。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。