Plexの検索はライブラリデータが増えるにつれて遅くなることがありますが、データベースのサイズだけでは、クエリ処理のどの部分に時間がかかっているのかは分かりません。
ライブラリが大きくなると、サーバーが管理する行、メタデータ、関連情報、アートワーク、状態の量が増えます。しかし、適切にインデックスが付与された検索は高速なままである一方、キャッシュミスやストレージの遅延によって、より小さなデータベースでも性能が低下することがあります。ライブラリの増加自体がボトルネックだと判断する前に、クエリの構造、インデックスの利用状況、ワーキングセットのサイズ、I/O遅延、バックグラウンド書き込みを切り分けて診断することが重要です。
ワーキングセットの増加に伴って検索コストが変化する
ライブラリのデータが増えると、検索やフィルター処理で考慮すべき情報量も増えます。特に、広範なテキストフィールド、関連情報、並べ替え、複数のメタデータテーブルにアクセスするリクエストでは、その影響が大きくなります。関連するワーキングセットが以前と同じキャッシュに収まらなくなったり、クエリが以前より多くの行を調べるようになったりすると、増加の影響が目に見えて現れます。
PlexはライブラリデータとメタデータをSQLiteデータベースに保存します。重要なのは、特定のライブラリサイズに達するとすべてのPlex検索が遅くなるということではなく、ワーキングセットが大きくなることで、非効率なアクセスパターン、キャッシュミス、ストレージの遅延がより頻繁に発生しやすくなるという点です。
ライブラリが大幅に増える前後で同じ検索を比較し、狭い範囲の検索と広範なクエリも比較してください。広範な検索だけがスケールに伴って大幅に遅くなる場合、問題は「データベースが大きすぎる」という単純なものではありません。
インデックスの品質はデータベースサイズだけより重要
インデックスを使うと、データベースはすべてのデータをスキャンせずに該当する行を見つけられます。ただし、クエリが適切なインデックスを利用できる場合に限られます。そのため、インデックスがない、クエリと適合していない、または肥大化していると、ファイルサイズそのものから予想されるよりも早く、ライブラリの増加による影響が現れることがあります。
クエリパターンに合ったインデックスは、不要なスキャンを減らします。この原則はクエリの挙動を理解するうえで役立ちますが、Plexのデータベーススキーマを手動で編集する手順として扱うべきではありません。
復旧計画なしに本番ライブラリへカスタムインデックスを追加するのではなく、Plexがサポートする修復およびメンテナンス手段を利用してください。診断の目的は、データベース処理が遅い段階であることを特定することであり、アプリケーションが管理するスキーマを外部から再設計することではありません。
キャッシュミスとストレージ遅延はクエリ時間を増幅させる
直前に繰り返した検索は、キャッシュに保持されたページやファイルシステムキャッシュから処理されることがあります。一方、メモリに負荷がかかった後の同じクエリでは、ストレージからより多くのデータを読み込まなければならない場合があります。そのため、I/O遅延の変化が目に見えているだけでも、ワーキングセットの増加が純粋なデータベース問題のように見えることがあります。
ストレージとキャッシュの挙動は読み取りに影響します。高速なストレージを使えばキャッシュミスによる負荷を軽減できますが、非効率なクエリ処理がなくなるわけではなく、ライブラリが大きくなってもメモリに収まり続けるとは限りません。
同じ検索を、キャッシュが温まった状態と、より冷えた状態で測定し、その間のデバイス遅延も確認してください。キャッシュにあるときは高速で、ストレージにアクセスしたときだけ遅いのであれば、次に確認すべきなのはCPU性能だけではなく、ワーキングセットがメモリに常駐しているかどうかとI/Oです。
バックグラウンド書き込みとデータベースの状態が遅延を加えることがある
ライブラリのスキャン、メタデータの更新、視聴状態の変更、メンテナンス処理は、読み取りと同時に実行されることがあります。書き込み処理が同時に行われると、ロックやI/Oの負荷が増加する可能性があります。また、破損やデータベースの不健全な状態によって生じた症状を、通常のライブラリの増加のせいにしてはいけません。
読み取り中心のSQLiteワークロードは、データベースのメンテナンスや配置の変更後に大きく変化することがあります。そのため、時間の経過に伴って検索性能を比較する際は、メンテナンスの状態も記録すべき条件です。ただし、バックアップなしにPlexへ一般的な最適化コマンドを実行する理由にはなりません。
遅い検索を、処理の少ない時間帯と、スキャンやメタデータジョブが実行されていることが分かっている時間帯の両方で繰り返してください。バックグラウンド処理中だけ遅延が発生するなら、ライブラリサイズを恒久的な限界とみなす前に、その処理をスケジュール変更するか分離してください。
遅延がサイズ、キャッシュ、ストレージのどれに追随するかをテストする
有効なテストマトリックスでは、クエリを一定に保ちながら、条件を1つずつ変えます。たとえば、キャッシュが温まった状態とより冷えた状態、バックグラウンド処理がない状態と実行中の状態、通常のストレージと既知の高速ストレージを比較します。同じ検索結果を確実に変化させる最初の条件は、データベースファイルのサイズだけを見るよりも有用な情報になります。
ライブラリの動作が遅くなる事例は、大規模ライブラリに関するコミュニティの報告で見られますが、それらの報告から、普遍的な原因やサイズのしきい値が証明されるわけではありません。
ストレージやデータベース処理をメディア処理パイプラインの他の部分から切り分ける必要がある場合は、役割ごとにPlexのデータパスを整理してください。検索性能を改善可能な形で捉えるには、ライブラリが単に大きな数値を超えたかどうかではなく、遅い段階がクエリ処理、キャッシュ、ストレージ、同時実行中のメンテナンスのどれなのかを特定することが重要です。
テック&AIハブ
もっと読む

Plexの状態とは何か、どの部分を永続化する必要があるのか?
永続的なPlexの状態情報とは、再起動や再構築後もサーバー環境を維持する情報を指します。メディアデータと一時的なトランスコードデータは、それぞれ別の役割を担います。

Plexはローカルセッションとリモートセッションで認証をどのように処理しますか?
Plexの認証はサーバーとアカウントの識別から始まり、その後、ローカルまたはリモートのネットワーク経路によって到達可能性と安全な接続の動作が決まります。

コンテナを再起動すると、Plex の動作が異なるのはなぜですか?
コンテナの再起動によって、永続化された Plex の状態を取り巻く実行環境が再構築されるため、タイミング、マウント、デバイス、ネットワーク、キャッシュによって結果が変わることがあります。

