- TiDBについて
- クイックスタート
- 発展させる
- 概要
- クイックスタート
- TiDB CloudでTiDBクラスターを構築する(DevTier)
- TiDBのCRUDSQL
- TiDBを使用してシンプルなCRUDアプリを構築する
- アプリケーション例
- TiDBに接続する
- データベーススキーマの設計
- データの書き込み
- データの読み取り
- 取引
- 最適化
- トラブルシューティング
- 参照
- デプロイ
- 移行する
- 管理
- 監視と警告
- トラブルシューティング
- TiDBトラブルシューティングマップ
- 遅いクエリを特定する
- 遅いクエリを分析する
- SQL診断
- Top SQLを使用して高価なクエリを特定する
- ログを使用して高価なクエリを特定する
- ステートメント要約表
- ホットスポットの問題のトラブルシューティング
- 読み取りと書き込みの待ち時間の増加のトラブルシューティング
- クラスタのオンサイト情報を保存および復元する
- クラスタセットアップのトラブルシューティング
- 高いディスクI/O使用量のトラブルシューティング
- ロックの競合のトラブルシューティング
- TiFlashのトラブルシューティング
- 楽観的なトランザクションでの書き込みの競合のトラブルシューティング
- データとインデックス間の不整合のトラブルシューティング
- 性能チューニング
- チューニングガイド
- Configuration / コンフィグレーションの調整
- システムチューニング
- ソフトウェアのチューニング
- SQLチューニング
- チュートリアル
- TiDBツール
- 概要
- ユースケース
- ダウンロード
- TiUP
- ドキュメントマップ
- 概要
- 用語と概念
- TiUPコンポーネントを管理する
- FAQ
- トラブルシューティングガイド
- コマンドリファレンス
- 概要
- TiUPコマンド
- TiUPクラスターコマンド
- 概要
- tiup cluster audit
- tiup cluster check
- tiup cluster clean
- tiup cluster deploy
- tiup cluster destroy
- tiup cluster disable
- tiup cluster display
- tiup cluster edit-config
- tiup cluster enable
- tiup cluster help
- tiup cluster import
- tiup cluster list
- tiup cluster patch
- tiup cluster prune
- tiup cluster reload
- tiup cluster rename
- tiup cluster replay
- tiup cluster restart
- tiup cluster scale-in
- tiup cluster scale-out
- tiup cluster start
- tiup cluster stop
- tiup cluster template
- tiup cluster upgrade
- TiUPDMコマンド
- 概要
- tiup dm audit
- tiup dm deploy
- tiup dm destroy
- tiup dm disable
- tiup dm display
- tiup dm edit-config
- tiup dm enable
- tiup dm help
- tiup dm import
- tiup dm list
- tiup dm patch
- tiup dm prune
- tiup dm reload
- tiup dm replay
- tiup dm restart
- tiup dm scale-in
- tiup dm scale-out
- tiup dm start
- tiup dm stop
- tiup dm template
- tiup dm upgrade
- TiDBクラスタートポロジリファレンス
- DMクラスタートポロジリファレンス
- ミラーリファレンスガイド
- TiUPコンポーネント
- PingCAPクリニック診断サービス(テクニカルプレビュー)
- TiDB Operator
- Dumpling
- TiDB Lightning
- TiDBデータ移行
- TiDBデータ移行について
- クイックスタート
- DMクラスタをデプロイする
- チュートリアル
- 高度なチュートリアル
- シャーディングされたテーブルからのデータのマージと移行
- GH-ost/PT-oscを使用するMySQLデータベースからの移行
- より多くの列を持つダウンストリームTiDBテーブルにデータを移行する
- 管理
- 参照
- 例
- トラブルシューティング
- リリースノート
- バックアップと復元(BR)
- TiDB Binlog
- TiCDC
- Dumpling
- sync-diff-inspector
- TiSpark
- 参照
- クラスターアーキテクチャ
- 主要な監視指標
- セキュリティ
- 権限
- SQL
- SQL言語の構造と構文
- SQLステートメント
ADD COLUMN
ADD INDEX
ADMIN
ADMIN CANCEL DDL
ADMIN CHECKSUM TABLE
ADMIN CHECK [TABLE|INDEX]
ADMIN SHOW DDL [JOBS|QUERIES]
ADMIN SHOW TELEMETRY
ALTER DATABASE
ALTER INDEX
ALTER INSTANCE
ALTER PLACEMENT POLICY
ALTER TABLE
ALTER USER
ANALYZE TABLE
BACKUP
BATCH
BEGIN
CHANGE COLUMN
COMMIT
CHANGE DRAINER
CHANGE PUMP
CREATE [GLOBAL|SESSION] BINDING
CREATE DATABASE
CREATE INDEX
CREATE PLACEMENT POLICY
CREATE ROLE
CREATE SEQUENCE
CREATE TABLE LIKE
CREATE TABLE
CREATE USER
CREATE VIEW
DEALLOCATE
DELETE
DESC
DESCRIBE
DO
DROP [GLOBAL|SESSION] BINDING
DROP COLUMN
DROP DATABASE
DROP INDEX
DROP PLACEMENT POLICY
DROP ROLE
DROP SEQUENCE
DROP STATS
DROP TABLE
DROP USER
DROP VIEW
EXECUTE
EXPLAIN ANALYZE
EXPLAIN
FLASHBACK TABLE
FLUSH PRIVILEGES
FLUSH STATUS
FLUSH TABLES
GRANT <privileges>
GRANT <role>
INSERT
KILL [TIDB]
LOAD DATA
LOAD STATS
MODIFY COLUMN
PREPARE
RECOVER TABLE
RENAME INDEX
RENAME TABLE
REPLACE
RESTORE
REVOKE <privileges>
REVOKE <role>
ROLLBACK
SELECT
SET DEFAULT ROLE
SET [NAMES|CHARACTER SET]
SET PASSWORD
SET ROLE
SET TRANSACTION
SET [GLOBAL|SESSION] <variable>
SHOW ANALYZE STATUS
SHOW [BACKUPS|RESTORES]
SHOW [GLOBAL|SESSION] BINDINGS
SHOW BUILTINS
SHOW CHARACTER SET
SHOW COLLATION
SHOW [FULL] COLUMNS FROM
SHOW CONFIG
SHOW CREATE PLACEMENT POLICY
SHOW CREATE SEQUENCE
SHOW CREATE TABLE
SHOW CREATE USER
SHOW DATABASES
SHOW DRAINER STATUS
SHOW ENGINES
SHOW ERRORS
SHOW [FULL] FIELDS FROM
SHOW GRANTS
SHOW INDEX [FROM|IN]
SHOW INDEXES [FROM|IN]
SHOW KEYS [FROM|IN]
SHOW MASTER STATUS
SHOW PLACEMENT
SHOW PLACEMENT FOR
SHOW PLACEMENT LABELS
SHOW PLUGINS
SHOW PRIVILEGES
SHOW [FULL] PROCESSSLIST
SHOW PROFILES
SHOW PUMP STATUS
SHOW SCHEMAS
SHOW STATS_HEALTHY
SHOW STATS_HISTOGRAMS
SHOW STATS_META
SHOW STATUS
SHOW TABLE NEXT_ROW_ID
SHOW TABLE REGIONS
SHOW TABLE STATUS
SHOW [FULL] TABLES
SHOW [GLOBAL|SESSION] VARIABLES
SHOW WARNINGS
SHUTDOWN
SPLIT REGION
START TRANSACTION
TABLE
TRACE
TRUNCATE
UPDATE
USE
WITH
- データ型
- 関数と演算子
- クラスター化インデックス
- 制約
- 生成された列
- SQLモード
- テーブル属性
- トランザクション
- ガベージコレクション(GC)
- ビュー
- パーティショニング
- 一時テーブル
- キャッシュされたテーブル
- 文字セットと照合
- SQLの配置ルール
- システムテーブル
mysql
- INFORMATION_SCHEMA
- 概要
ANALYZE_STATUS
CLIENT_ERRORS_SUMMARY_BY_HOST
CLIENT_ERRORS_SUMMARY_BY_USER
CLIENT_ERRORS_SUMMARY_GLOBAL
CHARACTER_SETS
CLUSTER_CONFIG
CLUSTER_HARDWARE
CLUSTER_INFO
CLUSTER_LOAD
CLUSTER_LOG
CLUSTER_SYSTEMINFO
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
DATA_LOCK_WAITS
DDL_JOBS
DEADLOCKS
ENGINES
INSPECTION_RESULT
INSPECTION_RULES
INSPECTION_SUMMARY
KEY_COLUMN_USAGE
METRICS_SUMMARY
METRICS_TABLES
PARTITIONS
PLACEMENT_POLICIES
PROCESSLIST
REFERENTIAL_CONSTRAINTS
SCHEMATA
SEQUENCES
SESSION_VARIABLES
SLOW_QUERY
STATISTICS
TABLES
TABLE_CONSTRAINTS
TABLE_STORAGE_STATS
TIDB_HOT_REGIONS
TIDB_HOT_REGIONS_HISTORY
TIDB_INDEXES
TIDB_SERVERS_INFO
TIDB_TRX
TIFLASH_REPLICA
TIKV_REGION_PEERS
TIKV_REGION_STATUS
TIKV_STORE_STATUS
USER_PRIVILEGES
VIEWS
METRICS_SCHEMA
- UI
- TiDBダッシュボード
- 概要
- 管理
- アクセス
- 概要ページ
- クラスター情報ページ
- Top SQLページ
- キービジュアライザーページ
- メトリクス関係グラフ
- SQLステートメント分析
- 遅いクエリページ
- クラスター診断
- 検索ログページ
- インスタンスプロファイリング
- セッションの管理とConfiguration / コンフィグレーション
- FAQ
- CLI
- コマンドラインフラグ
- Configuration / コンフィグレーションファイルのパラメーター
- システム変数
- ストレージエンジン
- テレメトリー
- エラーコード
- テーブルフィルター
- トポロジラベルによるレプリカのスケジュール
- よくある質問
- リリースノート
- すべてのリリース
- リリースタイムライン
- TiDBバージョニング
- v6.1
- v6.0
- v5.4
- v5.3
- v5.2
- v5.1
- v5.0
- v4.0
- v3.1
- v3.0
- v2.1
- v2.0
- v1.0
- 用語集
オペレーティングシステムのチューニング
このドキュメントでは、CentOS7の各サブシステムを調整する方法を紹介します。
ノート:
- CentOS 7オペレーティングシステムのデフォルト構成は、中程度のワークロードで実行されているほとんどのサービスに適しています。特定のサブシステムのパフォーマンスを調整すると、他のサブシステムに悪影響を与える可能性があります。したがって、システムを調整する前に、すべてのユーザーデータと構成情報をバックアップしてください。
- 実稼働環境に適用する前に、テスト環境ですべての変更を完全にテストします。
パフォーマンス分析方法
システムの調整は、システムパフォーマンス分析の結果に基づいている必要があります。このセクションでは、パフォーマンス分析の一般的な方法を示します。
60秒で
60,000ミリ秒でのLinuxパフォーマンス分析は、作者のBrendanGreggとNetflixパフォーマンスエンジニアリングチームによって公開されています。使用されるすべてのツールは、Linuxの公式リリースから入手できます。次のリスト項目の出力を分析して、最も一般的なパフォーマンスの問題をトラブルシューティングできます。
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
詳細な使用法については、対応するman
の手順を参照してください。
パフォーマンス
perfは、Linuxカーネルが提供する重要なパフォーマンス分析ツールであり、ハードウェアレベル(CPU / PMU、パフォーマンス監視ユニット)機能とソフトウェア機能(ソフトウェアカウンター、トレースポイント)をカバーします。詳細な使用法については、 perfの例を参照してください。
BCC / bpftrace
CentOS 7.6以降、LinuxカーネルはBerkeley Packet Filter(BPF)をサポートしています。したがって、適切なツールを選択して、 60秒での結果に基づいて詳細な分析を実行できます。 perf / ftraceと比較して、BPFはプログラム可能性とパフォーマンスのオーバーヘッドを低減します。 kprobeと比較して、BPFはより高いセキュリティを提供し、実稼働環境により適しています。 BCCツールキットの詳細な使用法については、 BPFコンパイラコレクション(BCC)を参照してください。
性能調整
このセクションでは、分類されたカーネルサブシステムに基づくパフォーマンスチューニングを紹介します。
CPU-周波数スケーリング
cpufreqは、CPU周波数を動的に調整するモジュールです。 5つのモードをサポートします。サービスパフォーマンスを確保するには、パフォーマンスモードを選択し、動的調整なしでCPU周波数をサポートされている最高の動作周波数に固定します。この操作のコマンドはcpupower frequency-set --governor performance
です。
CPU-割り込みアフィニティ
- 自動バランスは、
irqbalance
のサービスを介して実装できます。 - 手動バランス:
- 割り込みのバランスを取る必要があるデバイスを特定します。 CentOS 7.5以降、システムは、
be2iscsi
のドライバーとNVMe設定を使用するデバイスなど、特定のデバイスとそのドライバーに最適な割り込みアフィニティを自動的に構成します。このようなデバイスの割り込みアフィニティを手動で設定することはできなくなりました。 - その他のデバイスについては、チップのマニュアルをチェックして、これらのデバイスが割り込みの分散をサポートしているかどうかを確認してください。
- そうでない場合、これらのデバイスのすべての割り込みは同じCPUにルーティングされ、変更できません。
- その場合は、
smp_affinity
のマスクを計算し、対応する構成ファイルを設定します。詳細については、 カーネルドキュメントを参照してください。
- 割り込みのバランスを取る必要があるデバイスを特定します。 CentOS 7.5以降、システムは、
NUMACPUバインディング
Non-Uniform Memory Access(NUMA)ノード間でメモリにアクセスすることをできるだけ回避するために、スレッドのCPUアフィニティを設定することにより、スレッド/プロセスを特定のCPUコアにバインドできます。通常のプログラムでは、CPUバインディングにnumactl
コマンドを使用できます。詳細な使用法については、Linuxのマニュアルページを参照してください。ネットワークインターフェイスカード(NIC)の割り込みについては、 ネットワークを調整するを参照してください。
メモリ-透明な巨大ページ(THP)
データベースのメモリアクセスパターンは連続的ではなくまばらであることが多いため、データベースアプリケーションにTHPを使用することはお勧めしません。高レベルのメモリの断片化が深刻な場合、THPページが割り当てられるときに待ち時間が長くなります。 THPで直接圧縮が有効になっている場合、CPU使用率は急上昇します。したがって、THPを無効にすることをお勧めします。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
メモリ-仮想メモリパラメータ
dirty_ratio
パーセント比。ダーティページキャッシュの合計量がシステムメモリ全体のこのパーセンテージに達すると、システムはpdflush
の操作を使用してダーティページキャッシュをディスクに書き込み始めます。デフォルト値のdirty_ratio
は20%であり、通常は調整する必要はありません。 NVMeデバイスなどの高性能SSDの場合、この値を下げると、メモリ再利用の効率が向上します。dirty_background_ratio
パーセント比。ダーティページキャッシュの合計量がシステムメモリ全体のこのパーセンテージに達すると、システムはダーティページキャッシュをバックグラウンドでディスクに書き込み始めます。デフォルト値のdirty_ratio
は10%であり、通常は調整する必要はありません。 NVMeデバイスなどの高性能SSDの場合、低い値を設定すると、メモリ再利用の効率が向上します。
ストレージとファイルシステム
コアI/Oスタックリンクは長く、ファイルシステムレイヤー、ブロックデバイスレイヤー、ドライバーレイヤーが含まれます。
I/Oスケジューラ
I / Oスケジューラは、ストレージデバイスでI/O操作を実行するタイミングと期間を決定します。 I/Oエレベーターとも呼ばれます。 SSDデバイスの場合、I/Oスケジューリングポリシーをnoopに設定することをお勧めします。
echo noop > /sys/block/${SSD_DEV_NAME}/queue/scheduler
フォーマットパラメータ-ブロックサイズ
ブロックは、ファイルシステムの作業単位です。ブロックサイズは、1つのブロックに格納できるデータの量を決定し、したがって、毎回書き込まれる、または読み取られるデータの最小量を決定します。
デフォルトのブロックサイズは、ほとんどのシナリオに適しています。ただし、ブロックサイズ(または複数のブロックのサイズ)が、毎回通常読み取られるまたは書き込まれるデータの量と同じかわずかに大きい場合、ファイルシステムのパフォーマンスが向上し、データストレージの効率が高くなります。小さなファイルでもブロック全体が使用されます。ファイルは複数のブロックに分散できますが、これにより実行時のオーバーヘッドが増加します。
mkfs
コマンドを使用してデバイスをフォーマットする場合は、ファイルシステムオプションの一部としてブロックサイズを指定します。ブロックサイズを指定するパラメータは、ファイルシステムによって異なります。詳細については、 man mkfs.ext4
の使用など、対応するmkfs
のマニュアルページを参照してください。
mount
パラメータ
mount
コマンドでnoatime
オプションが有効になっている場合、ファイルの読み取り時にメタデータの更新が無効になります。 nodiratime
の動作が有効になっている場合、ディレクトリの読み取り時にメタデータの更新は無効になります。
ネットワークチューニング
ネットワークサブシステムは、機密性の高い接続を備えた多くの異なる部分で構成されています。 CentOS 7ネットワークサブシステムは、ほとんどのワークロードに最高のパフォーマンスを提供し、これらのワークロードのパフォーマンスを自動的に最適化するように設計されています。したがって、通常、ネットワークパフォーマンスを手動で調整する必要はありません。
ネットワークの問題は通常、ハードウェアまたは関連デバイスの問題によって引き起こされます。したがって、プロトコルスタックを調整する前に、ハードウェアの問題を除外してください。
ネットワークスタックは主に自己最適化されていますが、ネットワークパケット処理の次の側面がボトルネックになり、パフォーマンスに影響を与える可能性があります。
NICハードウェアキャッシュ:ハードウェアレベルでパケット損失を正しく監視するには、
ethtool -S ${NIC_DEV_NAME}
コマンドを使用してdrops
フィールドを監視します。パケット損失が発生した場合、ハード/ソフト割り込みの処理速度がNICの受信速度に追いつかない可能性があります。受信したバッファサイズが上限よりも小さい場合は、パケット損失を回避するためにRXバッファを増やすこともできます。クエリコマンドはethtool -g ${NIC_DEV_NAME}
で、変更コマンドはethtool -G ${NIC_DEV_NAME}
です。ハードウェア割り込み:NICがReceive-Side Scaling(RSS、マルチNIC受信とも呼ばれる)機能をサポートしている場合は、
/proc/interrupts
のNIC割り込みを確認します。割り込みが不均一な場合は、 CPU-周波数スケーリング 、およびCPU-割り込みアフィニティを参照してNUMACPUバインディング 。 NICがRSSをサポートしていない場合、またはRSSの数が物理CPUコアの数よりもはるかに少ない場合は、Receive Packet Steering(RPS、RSSのソフトウェア実装と見なすことができます)およびRPS拡張Receive Flow Steering( RFS)。詳細な構成については、 カーネルドキュメントを参照してください。ソフトウェア割り込み:
/proc/net/softnet_stat
の監視を観察します。 3番目の列を除く他の列の値が増加している場合は、CPU時間を増やすためにnet.core.netdev_budget
またはnet.core.dev_weight
の値をsoftirq
に適切に調整します。さらに、CPU使用率をチェックして、CPUを頻繁に使用しているタスクと、それらを最適化できるかどうかを判断する必要もあります。アプリケーションソケットの受信キュー:
ss -nmp
のResv-q
列を監視します。キューがいっぱいの場合は、アプリケーションソケットキャッシュのサイズを増やすか、自動キャッシュ調整方法を使用することを検討してください。さらに、アプリケーション層のアーキテクチャを最適化し、ソケットの読み取り間隔を短縮できるかどうかを検討してください。イーサネットフロー制御:NICとスイッチがフロー制御機能をサポートしている場合、この機能を使用して、カーネルがNICキュー内のデータを処理する時間を確保し、NICバッファオーバーフローの問題を回避できます。
割り込みの合体:ハードウェア割り込みが多すぎるとシステムパフォーマンスが低下し、ハードウェア割り込みが遅すぎるとパケット損失が発生します。新しいNICは、割り込み合体機能をサポートし、ドライバーがハードウェア割り込みの数を自動的に調整できるようにします。
ethtool -c ${NIC_DEV_NAME}
を実行してチェックし、ethtool -C ${NIC_DEV_NAME}
を実行してこの機能を有効にすることができます。アダプティブモードにより、NICは割り込み合体を自動的に調整できます。このモードでは、ドライバーはトラフィックモードとカーネル受信モードをチェックし、パケット損失を防ぐために合体設定をリアルタイムで評価します。異なるブランドのNICには、異なる機能とデフォルト構成があります。詳細については、NICのマニュアルを参照してください。アダプタキュー:プロトコルスタックを処理する前に、カーネルはこのキューを使用してNICが受信したデータをバッファリングし、各CPUには独自のバックログキューがあります。このキューにキャッシュできるパケットの最大数は
netdev_max_backlog
です。/proc/net/softnet_stat
の2番目の列を確認します。行の2番目の列が増え続ける場合は、CPU [row-1]キューがいっぱいで、データパケットが失われていることを意味します。この問題を解決するには、引き続きnet.core.netdev_max_backlog
の値を2倍にします。送信キュー:送信キューの長さの値によって、送信前にキューに入れることができるパケットの数が決まります。デフォルト値は
1000
で、これは10Gbpsに十分です。ただし、ip -s link
の出力からTXエラーの値を確認した場合は、それを2倍にすることができます:ip link set dev ${NIC_DEV_NAME} txqueuelen 2000
。ドライバー:NICドライバーは通常、チューニングパラメーターを提供します。デバイスのハードウェアマニュアルとそのドライバのドキュメントを参照してください。