SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

ASP.NET 2.0とSQL Server 2005によるカスタムのページング処理

結果を順序付けする機能によるサブセット取得の簡易化

既定のページング処理とカスタムのページング処理のパフォーマンスを比較する

 本稿のサンプルファイルに収められている(50,000個のレコードから成るテーブルを持つ)データベースで既定のページング処理とカスタムのページング処理のパフォーマンスを比較するために、私はSQLプロファイラとASP.NETのトレース機能の両方を使って相対的なパフォーマンスの差を突き止めました(このテストは、私のコンピュータ上で、バックグラウンドで他のプロセスを実行したりしながら行ったものなので、あまり厳密とは言えません。この結果を結論とは言い難いですが、2つのアプローチにおけるパフォーマンスの差を見れば、カスタムのページング処理が優れていることがはっきり分かると思います)。

SQLプロファイラの結果
既定のページング処理カスタムのページング処理
(Employeesからすべてのレコードを選択する)(Employeesから1ページ分のレコードを選択する)
時間(秒)読み取り回数時間(秒)読み取り回数
1.4553830.00329
1.4053830.00029
1.4343830.00029
1.3943830.00329
1.3653830.00329
平均:1.411平均:383平均:0.002平均:29
ASP.NETのトレース結果
既定のページング処理カスタムのページング処理SqlDataSourceのキャッシング
(Employeesからすべてのレコードを選択する)(Employeesから1ページ分のレコードを選択する)(すべてのレコードを選択してキャッシュに保管する)
ページ読み込み時間(秒)ページ読み込み時間(秒)ページ読み込み時間(秒)
2.341368525888070.02596112075696772.39666633608461
2.357722280345690.02800467657202240.0431529705591074
2.433682772531150.03590540138481290.0443528437273452
2.432375623158810.02955347676869550.0442313199023898
2.331670645291510.03000968000122920.0491523364002967
平均:2.379363969平均:0.029886871平均:0.515511161

 お分かりのように、カスタムのページング処理は既定のページング処理よりも、およそ2桁速いです。データベースレベルでは、GetEmployeesSubset(@startRowIndex int, @maximumRows int)ストアドプロシージャの処理速度は、「Employees」テーブルからすべてのレコードを返すシンプルなSELECTステートメントの約470倍です。ASP.NETレベルでは、カスタムのページング処理の速度は既定のページング処理の約120倍です。時間の短縮、つまりパフォーマンスの向上は、おそらく両方のアプローチに共通する高い作業負荷、すなわち、データベース接続を確立したりコマンドを実行したりする処理によるものでしょう。とはいえ、2桁という差はパフォーマンスの世界では非常に大きい差です。この差は、データ容量がもっと大きかったり、サーバで読み込みのようなことを実行したりすると、一層拡大すると思われます。

 SqlDataSourceのキャッシングでは、キャッシュが空であるとデータベースにアクセスしてすべてのレコードを取得しなければならないため、それだけ時間がかかります。キャッシュの再読み込みの頻度は、Webサーバ上の空きリソース(利用できるリソースが少ないと、キャッシュ内のDataSetが削除されることがあります)とキャッシュの有効期限ポリシーによって異なります。ただし、データをキャッシュした後は、パフォーマンスが著しく向上し、カスタムのページング処理のアプローチに匹敵します。0.516秒という平均時間は、キャッシュ内のデータで処理できる要求の数が増えるにつれて、0.05秒に近づきます。

まとめ

 ASP.NET 1.xのDataGridと同様、2.0のGridViewでは、既定とカスタムの2つのページング処理を利用することができます。既定のページング処理は、簡単に設定できますが、1ページ分のデータを表示するたびにデータベースに対してクエリを再実行しなければなりません。しかし、カスタムのページング処理は、表示する必要があるレコードのみを賢く取得するので、パフォーマンスを大幅に向上させることができます。SQL Server 2005では、ROW_NUMBER()機能を含め、結果を順序付けする機能を使うことで、任意のページに対するレコードの正しいサブセットの取得を簡易化しています。

 作成中のWebアプリケーションを将来的に拡張する必要がある場合や、ページング処理してユーザーに表示するデータセットが遅かれ早かれ大きくなる可能性が高い場合には、カスタムのページング処理を実装する必要があります。

 それでは、ハッピープログラミング!

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Scott Mitchell(Scott Mitchell)

http://www.4guysfromrolla.com/ScottMitchell.shtml

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/430 2006/08/22 15:49

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー