1. **帯域幅の余裕**: - トラフィックの分布が広く、最大値を予測しにくいため、帯域幅には余裕を持たせることが推奨されます。 2. **マクロな問題の検出**: - ネットワークの監視ポイントとして、転送データ量とパケット数が挙げられます。これにより、帯域幅の不足やスイッチング能力の確認が可能です。 3. **ワイヤスピードの計算**: - イーサネットのワイヤスピードは、帯域幅(bps)をフレームの最小サイズ(672ビット)で割ることで算出されます。各イーサネット規格のワイヤスピードも具体的に示されています。 4. **転送効率の注意点**: - ノイズやオーバヘッド、スイッチング能力により、理論上のワイヤスピード通りの速度が出ないことが多いです。実際のデータ転送処理に使用できる帯域幅は、全二重で帯域の70%程度で計算するのが一般的です。 --- 1. **ネットワーク関連** - 最低限の帯域幅、パケットロス率に注意する。 - PacketShaper等のアプライアンスで品質改善が可能。 2. **ミドルウェア** - キャッシュサイズ(メモリ割り当てサイズ)を適切に設定する。 - 他サーバと同居する場合はCPUアフィニティマスクを指定する。 - NUMAハードウェアで実行する場合、NUMA対応を確認する。 3. **DB物理設計(SQL Server)** - インデックス設計を理解し、適切に使用する。 - データ圧縮により、CPUリソースを犠牲にしてIOリソースを削減し、性能を向上させる。 - ファイル分割やパーティション分割を検討する。 - DBサーバの水平分散を検討する。 - 非正規化を検討する。 4. **Webサーバ構成** - SSL(HTTPS)やHTTP圧縮を必要に応じてアプライアンス化する。 - 静的コンテンツのキャッシュを必要に応じてキャッシュサーバを導入する。 5. **アプリケーションの実装** - 通信処理の周辺では性能劣化が多いため、事前に検証する。 - 遅いテクノロジ(COMの初期化、プロセス間通信など)に注意する。 - クライアント-サーバ間のラウンドトリップをファサードパターンにより集約する。 --- 1. **SQL Serverのパフォーマンスモニタリング**: - **ユーザ接続数**: 現在接続しているユーザ数の大幅な変動に注意。 - **フルスキャン数/秒**: アプリケーションがインデックスを効率的に使用していない可能性がある場合に増加。原因となるクエリを調査し、必要に応じてインデックスを作成。 - **インデックス検索数/秒**: システムのデータアクセスパターンをチェック。 - **ページ分割回数/秒**: 性能上問題となるページ分割の回数をチェック。 - **ロックの平均待ち時間**: 待ち状態の原因となる各ロック要求の平均待ち時間を監視。 - **ロック取得のための待機要求数/秒**: ロック取得のために待機しなければならない要求の数を監視。 - **ロックタイムアウト数/秒**: タイムアウトしたロック要求の数を監視。 - **デッドロック数/秒**: デッドロックに帰着するロック要求の数を監視。 - **ラッチ要求の平均待ち時間**: ラッチ要求の平均待ち時間を監視し、サーバがリソースを求めて競合に巻き込まれる恐れがある場合に注意。 2. **オンライン処理の性能向上のための推奨事項**: - システムの使用率が低いときに実行。 - 他のディスク I/O 操作を実行していないことを確認。 - `tempdb` を別のディスクシステム、または高速なディスクサブシステムに配置。 - `tempdb` が拡張できるように、ドライブに十分な空き領域を用意。 3. **データ圧縮**: - パーティション毎に異なる圧縮オプションを使用可能。 - ディスクI/Oを減らすが、CPU時間は増加。 4. **チューニング**: - ディスク・コントローラのI/O性能をフル活用。 - RAIDやディスク・レイアウトの最適化。 - ファイル・グループに分割・配置。 - データのパーティション分割。 - インデックスの見直し。 5. **監視**: - サーバーの監視、ログの監視、SQLプロファイラ(SQLトレース)などを定常的に実施。 - データベースのサイズの監視(アーカイブなど)。 6. **その他の性能向上手法**: - パーティション分割や並列クエリによる性能向上。 - 分割キーによるシャーディングの検討。 --- 1. **NGenの活用**: - NGen(Native Image Generator)は、JIT(Just-In-Time)コンパイルを事前に行うことで、アプリケーションの起動速度を向上させます。特に、実行環境に合わせた最適化が可能です。 - .NET Coreでは、NGenの代わりにReadyToRunとTiered Compilationが使用されます。 2. **プロセス起動の最適化**: - ミドルウェアやIIS、ASP.NETのプロセス起動時間を短縮するための方法が紹介されています。 - IIS7以降では、アプリケーションプールの自動スタートアップを構成することが推奨されています。 - IIS6以前では、定期的にダミーリクエストを送信するなどの工夫が必要です。 3. **UI初期化の最適化**: - UIコントロールの初期化や描画によるチラつきを抑えるための方法が紹介されています。 - Windows Formsでは、ダブル・バッファリングやサスペンド・レイアウトを使用して描画回数を抑えることができます。 4. **HTTP/2の導入**: - HTTP/2は、通信・接続の多重化により、HTTP/1.1に比べて高速な通信を実現します。 - 既存のHTTPと互換性を保ちながら、セッション層を効率化するプロトコルです。 5. **大量データの処理**: - メモリの大量消費やCPU時間の問題を解決するための方法が紹介されています。 - 固定長レコードのランダムアクセスには、SetFilePointer関数を使用してファイル・ポインタを制御する方法が有効です。 6. **回帰テストツールの活用**: - UI自動化による回帰テストツールや負荷テストツールの延長上の回帰テストツールが紹介されています。 - 具体的なツールとして、Silk TestやHP Unified Functional Testingが挙げられています。 --- 1. **Ramp-up期間の使用方法** - Ramp-up期間は多重度(仮想ユーザ数)を徐々に増加させるために使用されるが、スループットの調整にはタイマを使用することが推奨される。 2. **タイマの設定** - 入力時間、思考時間を考慮してタイマを設定する。 - HTTPリクエストのサンプラー以下に定数タイマを追加し、スレッド遅延時間を計算して設定する。 - 例:10ページのシナリオを10回実行する場合、目標レスポンスが3秒の場合、スレッド遅延時間は33秒/ページとなる。 3. **定数スループット・タイマの設定** - スレッドグループやコントローラーに定数スループット・タイマを追加し、1仮想ユーザ中のターゲットスループットを設定する。 - 例:10サンプルのシナリオを10回実行する場合、ターゲットスループットは1サンプル/分となる。 --- 1. **JMeterによる負荷テスト**: - JMeterを使用してSQL Serverの負荷テストを行う方法が記載されています。具体的なリンクや参考資料も含まれています。 - JMeterのインストール、用語、Webアプリの負荷テスト、可変値の追跡、正規表現、結果のレポーティングなどの詳細が含まれています。 2. **TCPのチューニング**: - ウィンドウサイズ(RWIN)の計算方法や回線速度の求め方、pingコマンドを使用した具体的な手順が説明されています。 - 回線速度とpingの平均速度を用いてRWINを計算する方法が示されています。 3. **SQL Serverのチューニングポイント**: - 動的ディスク管理、データパーティション、インデックス構造など、SQL Serverのパフォーマンス向上に関する詳細なチューニングポイントが記載されています。 - tempdbの数をCPUコア数に合わせる、メモリ内のページロック指定を変更する、並列処理の最大限度を設定するなどの具体的な設定方法が含まれています。 4. **.NETアプリケーションのパフォーマンスチューニング**: - 構成設定の推奨値や具体的な設定例が示されています。 - MaxConcurrentRequestsPerCPUのレジストリ設定やaspnet.configの設定方法が記載されています。 --- 1. **プロセス間コミュニケーション**: - ソケット、パイプ、RPC、および COM を使用する場合、データの処理におけるビット幅別の対応状況をチェックする。 - 32 ビット プロセスから64 ビット プロセスへのアクセスを避ける。 2. **QoS(サービス品質)**: - ルータやL3スイッチに実装されるQoSの優先順位・帯域制御などの機能を利用する。 - 管理者の知らないところで利用禁止されているP2Pソフトの検知も可能(対応するプロトコル パーサが実装されている場合)。 3. **時間軸を考慮した通信概要の把握**: - パケットをキャプチャし、IO Graphsダイアログを使用して時間軸を考慮した通信の概要を把握する。 - グラフの生成とフィルタの適用、X・Y軸の単位・スケールの変更が可能。 4. **バッチ処理**: - 大量データのバッチ処理は、基本的にストアドプロシージャが高速。 - ネットワークやプロセス間の通信処理が発生しないため、データ送受信のラウンドトリップが発生しない。 - カーソルによるフェッチが使用できるため、大量データの結果セットを取得した場合もメモリ消費量を抑えることができる。 5. **検索、結合、統合、集計機能**: - 大量データのバッチ処理で、DBMSの検索機能(Index Seek)、結合、統合、集計機能(Join、Union、Group By)を使用する。 - インデックスの構築・更新、統計情報の構築・更新が必要。 6. **オーバーヘッド**: - DBを利用可能にするまでのオーバーヘッドには、インポート(インサート)、インデックス構築・更新、統計情報の構築・更新、必要であればエクスポートが含まれる。 --- 1. **pingコマンドの使用** - 1パケット分のデータ(1,500バイト)を送信し、pingの平均応答速度を測定する。 - 例: `ping xxx.xxx.xxx.xxx -l 1500` - 結果の解釈: 平均応答速度が2ミリ秒であれば、pingが戻ってくる平均速度は2ミリ秒。 2. **RWINの計算方法** - 回線速度とpingの平均応答速度を用いてRWIN(Receive Window Size)を計算する。 - 計算式: `RWIN = 回線速度 (MB/sec) * pingの平均応答速度 (msec)` - 例: 回線速度が10 Mbps、pingの平均応答速度が2 msecの場合、RWINは20 KB(20,000バイト)となる。 3. **TCPのチューニング** - デフォルトのRWIN値は65,535バイトであり、通常のネットワーク環境ではRWINの拡張は不要。 - チューニングポイント: - RWINはMSS(Maximum Segment Size)の整数倍に設定する。 - パケット再送信が発生する場合は、RWINを1.5倍にする。 --- 1. **SQL Serverのパフォーマンス向上**: - SQL Serverサービスがファイルをロックしないようにすることで、パフォーマンスを改善します。 - ウイルス対策ソフトウェアのスキャンリストから、IISの圧縮ディレクトリを除外することで、HTTP要求の処理速度を向上させます。 2. **クラスタ環境でのパフォーマンス**: - クラスタ環境において、ウイルス対策ソフトウェアがクラスタの構成情報を保持しているフォルダーをスキャンしないように設定することで、情報の同期を迅速に行い、クラスタサービスのパフォーマンスを維持します。 3. **負荷テスト**: - 負荷テストを行う際、GUIを使用せずにCUI(non-GUI)モードで起動することで、テストのパフォーマンスを向上させます。 - 複数のクライアントを準備し、コントローラーから複数のエージェントを制御することで、大規模なテストを効率的に実施します。 4. **サーバ ステートレスな状態管理技術**: - サーバにデータを保持しないことで、サーバリソースの消費量を減らし、拡張性を高めます。 - 負荷分散(冗長化)構成が容易であり、拡張性・信頼性を確保するためのパフォーマンス向上が期待できます。 5. **TCPの問題分析**: - TCPの通信シーケンスを分析し、シーケンス番号やACK番号を確認することで、通信のパフォーマンスを評価します。 - TCPフラグやオプションを使用してデータを検索・フィルタすることで、効率的に問題を抽出し、パフォーマンスを最適化します。