MySQL接続の最適化とは、主にクライアントがデータベースに接続するプロセスと、クライアントのリクエストに応じてデータベースがデータテーブルとインデックスを開くプロセスに含まれるパラメータ調整を指します。以下で詳しく説明します
MySQL の最適化キャッシュ前述の最適化この記事では、非常に重要な概念について説明しました。つまり、表示変数は、my.cnf 値でコンパイルまたは設定されたシステムの変数を表すために使用されます。 Show status は status 値と呼ばれ、現在実行中のサービス インスタンスのステータス情報を表示し、動的に変化する値です。したがって、現在の MySQL が正常に実行されているかどうかを観察するためによく使用されます。正常でない場合は、static パラメーターを調整して MySQL のパフォーマンスを向上させます。したがって、これら 2 つの概念の違いを理解することが、その後のチューニングの基礎となります。
MySQL 接続の最適化
以前、社内で MySQL に接続しようとしたとき、常に接続できなかったことを思い出します。 DBA を見つけて原因を調査したところ、現在の MySQL 接続数がいっぱいであることが判明し、調整した結果、問題は解決されました。接続数が多すぎるエラーには、一般に 2 つの理由があります。1 つ目は、MySQL に接続する人が実際に多く、接続数が不足することです。 2 つ目は、max_connections 値が小さすぎることです。1. 接続パラメータ (変数を表示)
mysql> show variables like '%connect%'; +-----------------------------------------------+-----------------+ | Variable_name | Value | +-----------------------------------------------+-----------------+ | character_set_connection | utf8 | | collation_connection | utf8_general_ci | | connect_timeout | 10 | | disconnect_on_expired_password | ON | | init_connect | | | max_connect_errors | 100 | | max_connections | 151 | | max_user_connections | 0 | | performance_schema_session_connect_attrs_size | 512 | +-----------------------------------------------+-----------------+
max_connections
は、MySQL サービス インスタンスが同時に受け入れることができる同時接続の最大数を指します。実際、MySQL は最大接続数に 1 を追加するアルゴリズムをサポートしており、接続数を使い果たした場合でも、スーパー管理者は管理のためにサーバーとの接続を確立できます。 max_connections
是指MySQL服务实例能够同时接受的的最大并发连接数。MySQL实际上支持最大连接数加一的算法,保障当连接数用完的时候,超级管理员依然可以和服务端建立连接,进行管理。
max_user_connections
设置指定账号的最大并发连接数。
max_connect_errors
当某台非法主机恶意连接MySQL服务端,遭到的错误达到设置值后,MySQL会解决来自该主机的所有连接。但执行flush hosts后会清零。
2、连接状态(show status)
有一点需要注意的,变量值(show variables)是以小写字母开头的,而状态值(show status)是以大写字母开头。这样区分有助于记忆和分类
mysql> show status like '%connections%'; +-----------------------------------+-------+ | Variable_name | Value | +-----------------------------------+-------+ | Connection_errors_max_connections | 0 | | Connections | 197 | | Max_used_connections | 2 | +-----------------------------------+-------+
Connection_errors_max_connections
当MySQL的最大并发数大于系统变量(show variables)中max_connections的最大并发数,因此而被拒绝的次数,将会记录在这个变量里。如果Connection_error_max_connections值比较大,则说明当前系统并发比较高,要考虑调大max_connections的值。
Connections
表示MySQL从启动至今,成功建立连接的连接数,这个值是不断累加的。
Max_used_connections表示MySQL从启动至今,同一时刻并发的连接数,取得是最大值。如果这个值大于 max_connections则表明系统经常处于高并发的状态,应该考虑调大最大并发连接数。
3、连接线程参数(thread variabls and status)
mysql> show variables like 'thread%'; +--------------------+---------------------------+ | Variable_name | Value | +--------------------+---------------------------+ | thread_cache_size | 9 | | thread_concurrency | 10 | | thread_handling | one-thread-per-connection | | thread_stack | 262144 | +--------------------+---------------------------+
thread_cache_size
设置连接线程缓存的数目。这个缓存相当于MySQL线程的缓存池(thread cache pool),将空闲的连接线程放入连接池中缓存起来,而非立即销毁。当有新的连接请求时,如果连接池中有空闲的连接,则直接使用。否则要重新创建线程。创建线程是一个不小的系统开销。MySQL的这部分线程处理和Nginx 的线程处理有异曲同工之妙,以后介绍Nginx的线程处理时,会拿来做对比。
thread_handling
默认值是: one-thread-per-connection 表示为每个连接提供或者创建一个线程来处理请求,直至请求完毕,连接销毁或者存入缓存池。当值是no-threads 时,表示在始终只提供一个线程来处理连接,一般是单机做测试使用的。
thread_stack stack
是堆的意思,由PHP 进程详解这篇博客,知道进程和线程都是有唯一的ID的,进程的ID系统会维护,二线程的ID,则由具体的线程库区维护,当进程或者线程休眠的时候,进程的上下文信息要在内存中开辟出一块区域,保存进程的上下文信息,以便于迅速唤醒程序。默认为MySQL的每个线程设置的堆栈大小为:262144/1024=256k
查看线程状态信息
mysql> show status like 'Thread%'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_cached | 1 | | Threads_connected | 1 | | Threads_created | 2 | | Threads_running | 1 | +-------------------+-------+
Thread_cached
当前线程池的线程数
Thread_connected
max_user_connections
指定したアカウントの最大同時接続数を設定します。
max_connect_errors
不正なホストが MySQL サーバーに悪意を持って接続し、発生したエラーが設定値に達すると、MySQL はホストからのすべての接続を解決します。ただし、flush🎜 ホストを実行するとクリアされます。 🎜🎜🎜2. 接続ステータス (show status)🎜🎜🎜 注意すべき点は、変数値 (show variables) は小文字で始まるのに対し、ステータス値 (show status) は大文字で始まることです。この区別は記憶と分類に役立ちます🎜🎜🎜🎜mysql> show variables like 'back_log'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | back_log | 80 | +---------------+-------+🎜
Connection_errors_max_connections
MySQL の最大同時実行数が システム変数 🎜 (変数を表示) の max_connections の最大同時数、つまり拒否の数がこの変数に記録されます。 Connection_error_max_connections の値が比較的大きい場合は、現在のシステムの同時実行性が比較的高いことを意味するため、max_connections の値を増やすことを検討する必要があります。 🎜🎜Connections
は、MySQL が開始されてから正常に確立された接続の数を示します。この値は継続的に蓄積されます。 🎜🎜Max_used_connections は、MySQL の開始以降の同時接続の最大数を示します。この値が max_connections より大きい場合は、システムが頻繁に同時実行性の高い状態にあることを示しているため、同時接続の最大数を増やすことを検討する必要があります。 🎜🎜🎜3. 接続スレッドのパラメータ (スレッド変数とステータス) 🎜🎜🎜🎜🎜mysql> show status like 'Aborted%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Aborted_clients | 0 | | Aborted_connects | 219 | +------------------+-------+🎜
thread_cache_size
接続スレッドのキャッシュ数を設定します。このキャッシュは MySQL スレッド キャッシュ プール (スレッド キャッシュ プール) と同等であり、アイドル状態の接続スレッドを接続プールに配置し、それらをすぐに破棄するのではなくキャッシュします。新しい接続要求がある場合、接続プールにアイドル状態の接続がある場合は、それが直接使用されます。それ以外の場合は、スレッドを再作成する必要があります。スレッドの作成は、かなりのシステム オーバーヘッドを引き起こします。 MySQL のスレッド処理のこの部分は、Nginx のスレッド処理と似ています。今後 Nginx のスレッド処理を紹介するときに、それらを比較してみます。 🎜🎜thread_handling
デフォルト値は次のとおりです: 接続ごとに 1 つのスレッドは、リクエストが完了するか、接続が破棄されるかキャッシュに保存されるまで、リクエストを処理するために各接続にスレッドを提供または作成することを意味します。プール。値が no-thread の場合、接続を処理するために常に 1 つのスレッドのみが提供されることを意味します。これは通常、単一マシンでのテストに使用されます。 🎜🎜thread_stack stack
はヒープを意味します。このブログでは、プロセスとスレッドが固有の ID を持つことが知られており、2 番目のスレッドの ID が決定されます。特定のスレッド ライブラリ領域のメンテナンスにより、プロセスまたはスレッドがスリープしているときに、プログラムをすぐに起動できるように、プロセスのコンテキスト情報を保存するメモリ領域をメモリ内に開く必要があります。 MySQL の各スレッドに設定されているデフォルトのスタック サイズは次のとおりです: 262144/1024=256k🎜🎜スレッドのステータス情報を表示🎜🎜🎜🎜mysql> show status like 'Slow%'; +---------------------+-------+ | Variable_name | Value | +---------------------+-------+ | Slow_launch_threads | 0 | | Slow_queries | 0 | +---------------------+-------+🎜
Thread_cached
現在のスレッド プール内のスレッドの数🎜🎜Thread_connected
現在の接続数🎜Thread_cached
: 当前连接线程创建数, 如果这个值过高,可以调整threadcachesize 也就是调整线程缓存池的大小。
Thred_runnint
: 当前活跃的线程数。
连接请求堆栈
MySQL在很短的时间内,突然收到很多的连接请求时,MySQL会将不能来得及处理的连接请求保存在堆栈中,以便MySQL后续处理。back_log参数设置了堆栈的大小,可以通过如下命令查看:
mysql> show variables like 'back_log'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | back_log | 80 | +---------------+-------+
连接异常
mysql> show status like 'Aborted%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Aborted_clients | 0 | | Aborted_connects | 219 | +------------------+-------+
Aborted_clients
MySQL 客户机被异常关闭的次数。
Aborted_connects
试图连接到MySQL服务器而失败的连接次数。
other
mysql> show status like 'Slow%'; +---------------------+-------+ | Variable_name | Value | +---------------------+-------+ | Slow_launch_threads | 0 | | Slow_queries | 0 | +---------------------+-------+
mysql> show variables like 'slow_launch_time'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | slow_launch_time | 2 | +------------------+-------+
Slow_lunch_threads 创建线程的时间过长,超过slow_launch_time的设定值,则会记录。
可以通过使用 Connection_error%来查看连接的错误状态信息:
mysql> show status like 'Connection_error%'; +-----------------------------------+-------+ | Variable_name | Value | +-----------------------------------+-------+ | Connection_errors_accept | 0 | | Connection_errors_internal | 0 | | Connection_errors_max_connections | 0 | | Connection_errors_peer_address | 0 | | Connection_errors_select | 0 | | Connection_errors_tcpwrap | 0 | +-----------------------------------+-------+
Connection_errors_peer_address 查找MySQL客户机IP地址是发生的错误数。
以上がMySQL の最適化接続最適化のサンプル コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

INNODBは、レドログと非論的なものを使用して、データの一貫性と信頼性を確保しています。 1.レドログは、クラッシュの回復とトランザクションの持続性を確保するために、データページの変更を記録します。 2.Undologsは、元のデータ値を記録し、トランザクションロールバックとMVCCをサポートします。

説明コマンドのキーメトリックには、タイプ、キー、行、および追加が含まれます。 1)タイプは、クエリのアクセスタイプを反映しています。値が高いほど、constなどの効率が高くなります。 2)キーは使用されているインデックスを表示し、nullはインデックスがないことを示します。 3)行はスキャンされた行の数を推定し、クエリのパフォーマンスに影響します。 4)追加の情報を最適化する必要があるというFilesortプロンプトを使用するなど、追加情報を提供します。

Temporaryを使用すると、MySQLクエリに一時テーブルを作成する必要があることが示されています。これは、異なる列、またはインデックスされていない列を使用して順番に一般的に見られます。インデックスの発生を回避し、クエリを書き直し、クエリのパフォーマンスを改善できます。具体的には、expliect出力に使用を使用する場合、MySQLがクエリを処理するために一時テーブルを作成する必要があることを意味します。これは通常、次の場合に発生します。1)個別またはグループビーを使用する場合の重複排除またはグループ化。 2)Orderbyに非インデックス列が含まれているときに並べ替えます。 3)複雑なサブクエリを使用するか、操作に参加します。最適化方法には以下が含まれます。1)OrderbyとGroupB

MySQL/INNODBは、4つのトランザクション分離レベルをサポートしています。 1.ReadunCommittedは、知らないデータを読み取ることができます。 2。読み込みは汚い読み取りを回避しますが、繰り返しのない読みが発生する可能性があります。 3. RepeatablerEadはデフォルトレベルであり、汚い読み取りと非回復不可能な読みを避けますが、幻の読み取りが発生する可能性があります。 4. Serializableはすべての並行性の問題を回避しますが、同時性を低下させます。適切な分離レベルを選択するには、データの一貫性とパフォーマンス要件のバランスをとる必要があります。

MySQLは、Webアプリケーションやコンテンツ管理システムに適しており、オープンソース、高性能、使いやすさに人気があります。 1)PostgreSQLと比較して、MySQLは簡単なクエリと高い同時読み取り操作でパフォーマンスが向上します。 2)Oracleと比較して、MySQLは、オープンソースと低コストのため、中小企業の間でより一般的です。 3)Microsoft SQL Serverと比較して、MySQLはクロスプラットフォームアプリケーションにより適しています。 4)MongoDBとは異なり、MySQLは構造化されたデータおよびトランザクション処理により適しています。

MySQLインデックスのカーディナリティは、クエリパフォーマンスに大きな影響を及ぼします。1。高いカーディナリティインデックスは、データ範囲をより効果的に狭め、クエリ効率を向上させることができます。 2。低カーディナリティインデックスは、完全なテーブルスキャンにつながり、クエリのパフォーマンスを削減する可能性があります。 3。ジョイントインデックスでは、クエリを最適化するために、高いカーディナリティシーケンスを前に配置する必要があります。

MySQL学習パスには、基本的な知識、コアの概念、使用例、最適化手法が含まれます。 1)テーブル、行、列、SQLクエリなどの基本概念を理解します。 2)MySQLの定義、作業原則、および利点を学びます。 3)インデックスやストアドプロシージャなどの基本的なCRUD操作と高度な使用法をマスターします。 4)インデックスの合理的な使用や最適化クエリなど、一般的なエラーのデバッグとパフォーマンス最適化の提案に精通しています。これらの手順を通じて、MySQLの使用と最適化を完全に把握できます。

MySQLの実際のアプリケーションには、基本的なデータベース設計と複雑なクエリの最適化が含まれます。 1)基本的な使用法:ユーザー情報の挿入、クエリ、更新、削除など、ユーザーデータの保存と管理に使用されます。 2)高度な使用法:eコマースプラットフォームの注文や在庫管理など、複雑なビジネスロジックを処理します。 3)パフォーマンスの最適化:インデックス、パーティションテーブル、クエリキャッシュを使用して合理的にパフォーマンスを向上させます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

WebStorm Mac版
便利なJavaScript開発ツール
