MySQL は、データベース管理に最も一般的に使用されるデータベース管理言語である構造化照会言語 (SQL) を使用するオープンソースのリレーショナル データベース管理システム (RDBMS) です。
MySQL はオープン ソースであるため、誰でも一般公衆利用許諾に基づいてダウンロードし、個人のニーズに応じて変更できます。
MySQL は、その速度、信頼性、適応性により多くの注目を集めています。ほとんどの人は、トランザクション処理を行わずにコンテンツを管理するには MySQL が最適な選択肢であることに同意します。
推奨チュートリアル: mysql 入門ビデオ チュートリアル
MySQL の概要
MySQL はオープン ソースのリレーショナル データベース管理システム (RDBMS) であり、MySQL データベース システムは、データベース管理に最も一般的に使用されるデータベース管理言語である構造化照会言語 (SQL) を使用します。
MySQL はオープン ソースであるため、誰でも一般公衆利用許諾に基づいてダウンロードし、個人のニーズに応じて変更できます。 MySQL は、その速度、信頼性、適応性により多くの注目を集めています。ほとんどの人は、トランザクション処理を行わずにコンテンツを管理するには MySQL が最適な選択肢であることに同意します。
MySQL という名前の由来はあまり明らかではありません。より影響力のある記述は、10 年以上にわたり、基本的なガイドや多数のライブラリやツールには「my」という接頭辞が付けられており、いずれにしても、MySQL AB の創設者の 1 人である Monty Widenius の娘も My という名前であるということです。 。この 2 つのどちらが MySQL という名前を付けたのかは、開発者も含めて依然として謎です。
MySQL のイルカ ロゴの名前は「sakila」です。これは、「Dolphin Naming」コンテストでユーザーが提案した多数の名前リストの中から、MySQL AB の創設者によって選ばれました。優勝した名前は、アフリカ、スワジランドのオープンソース ソフトウェア開発者である Ambrose Twebaze によって提供されました。アンブローズさんによると、サキラはシスワティと呼ばれるスワジ語の方言に由来しており、アンブローズさんの故郷ウガンダに近いタンザニアのアルーシャにある小さな町の名前でもある。
MySQL はそれほど強力ではないかもしれませんが、オープンソースで広く普及しているため、多くの人がこのデータベースについて知っています。その歴史も伝説的です。
データベースの最適化
ストレージ エンジンとして InnoDB を選択
大規模向けデータベース製品 高い信頼性と同時実行性の要件を実現するには、デフォルトの MySQL ストレージ エンジンとして、MyISAM よりも InnoDB を選択することをお勧めします。
データベース構造を最適化する
データベースのスキーマ、テーブル、フィールドを整理して I/O オーバーヘッドを削減し、関連項目をまとめて保存し、簡単に実行できるように事前に計画します。いつでもアクセス可能 データ量が増加しても、パフォーマンスは高レベルを維持できます。
データ テーブルは、占有するスペースを最小限に抑えるように設計する必要があり、テーブルの主キーはできるだけ短くする必要があります。 · InnoDB テーブルの場合、主キーが配置されている列は各セカンダリ インデックス エントリでレプリケートできるため、多くのセカンダリ インデックスがある場合、短い主キーによって多くのスペースを節約できます。
クエリのパフォーマンスを向上させるために必要なインデックスのみを作成します。インデックスを使用すると検索が容易になりますが、挿入および更新操作の実行時間が長くなります。
InnoDB の ChangeBuffering 機能
InnoDB は、補助インデックスの維持に必要なディスク I/O を削減できる変更バッファリング構成を提供します。大規模なデータベースでは、セカンダリ インデックスを最新の状態に保つために、多数のテーブル操作と大量の I/O が発生する可能性があります。関連するページがバッファ プールにない場合、InnoDB のchangebuffer はセカンダリ インデックス エントリへの変更をキャッシュするため、ディスクからページをすぐに読み取ることができないために発生する時間のかかる I/O 操作が回避されます。ページがバッファ プールにロードされると、バッファされた変更がマージされ、更新されたページが後でディスクにフラッシュされます。これによりパフォーマンスが向上し、MySQL 5.5 以降で使用できます。
InnoDB ページ圧縮
InnoDB はテーブルのページレベルの圧縮をサポートしています。データ ページが書き込まれるとき、特定の圧縮アルゴリズムを使用してデータ ページが圧縮されます。圧縮されたデータは、ホールパンチ機構によってページの終わりにある空のブロックを解放してディスクに書き込まれます。圧縮が失敗した場合、データは変更されずに書き込まれます。通常、インデックスがデータベースの合計サイズの大部分を占めるため、テーブルとインデックスが圧縮されます。圧縮によりメモリ、I/O、または処理時間を大幅に節約でき、パフォーマンスとスケーラビリティが向上します。また、メモリとディスク間で転送されるデータ量も削減されます。 MySQL5.1 以降のバージョンでは、この機能がサポートされています。
ページ圧縮は共有表スペース内の表をサポートしていないことに注意してください。共有表スペースには、システム表スペース、一時表スペース、および通常の表スペースが含まれます。
#バッチデータインポートを使用する
主キーでソートされたデータ ソースを使用してバッチ データをインポートすると、データ挿入プロセスを高速化できます。そうしないと、順序を維持するために他の行の間に行を挿入する必要が生じる可能性があり、これによりディスク I/O が増加し、パフォーマンスに影響が生じ、ページ分割が増加する可能性があります。また、自動コミット モードをオフにすると、挿入のたびにディスクへのログのフラッシュが実行されるため、これも有益です。一括挿入中に一意キーと外部キーのチェックを一時的に変更すると、ディスク I/O が大幅に削減される可能性があります。新しく作成したテーブルの場合、一括インポート後に外部キー/一意キー制約を作成するのがベスト プラクティスです。
データが安定したサイズに達するか、テーブルが増加して数十メガバイトまたは数百メガバイトが追加されたら、OPTIMIZETABLE ステートメントを使用してテーブルを再編成し、無駄な領域を圧縮することを検討する必要があります。再編成されたテーブルのフルテーブルスキャンでは、必要な I/O が少なくなります。
InnoDB ディスク I/O の最適化
InnoDB バッファ プール サイズを増やすと、ディスク I/O 経由ではなくバッファ プールからクエリにアクセスできるようになります。システム変数 innodb_flush_method を調整して、バッファ クリア インジケーターが最適なレベルに達するように調整します。
MySQL のメモリ割り当て
MySQL に十分なメモリを割り当てる前に、さまざまな領域での MySQL のメモリ要件を考慮してください。考慮すべき主な領域は次のとおりです。 同時接続 - 多数の同時接続があると、並べ替えテーブルと一時テーブルに大量のメモリが必要になります。この記事の執筆時点では、3000 の同時接続を処理するデータベースには 16 GB ~ 32 GB の RAM で十分です。
メモリの断片化により、メモリの約 10% 以上が消費される可能性があります。 innodb_buffer_pool_size、key_buffer_size、query_cache_size などのキャッシュとバッファは、割り当てられたメモリの約 80% を消費します。
毎日のメンテナンス
低速クエリ ログを定期的にチェックし、キャッシュを効果的に使用してディスク I/O を削減するクエリ メカニズムを最適化します。テーブル全体のスキャンを実行するのではなく、最小限の行をスキャンするように最適化します。
DBA によるパフォーマンスのチェックと分析に役立つその他のログには、エラー ログ、一般クエリ ログ、バイナリ ログ、DDL ログ (メタデータ ログ) などがあります。
断片化を減らすためにキャッシュとバッファを定期的にフラッシュします。 OPTIMIZETABLE ステートメントを使用してテーブルを再編成し、無駄になる可能性のある領域を圧縮します。 [1]
以上がMySQLとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。