Skip to main content

 

 

 

 

Template:OutSystems/Documentation_KB/Breadcrumb_New_Layout

 

 

Template:OutSystems/OSLanguageSwitcher

 

 

 

OutSystems

大きいセッション変数を避ける

セッション変数は、アプリケーションで複数のリクエストにわたって情報を保持するときに使用します。通常はアプリケーションの動作のカスタマイズに使用する少量の情報を、シリアル化してバイナリとしてデータベースに保存することで保持します。セッションはリクエストが実行されるたびに読み込まれるため、大きなデータ構造や大量の情報をセッションに保存するとパフォーマンスの問題が発生するおそれがあります。

以下に例を示します。

各ページから部分的な情報を収集する、複数ページのウィザードがあるとします。情報はウィザードの完了時に保存されます。一時的な情報なのでセッションに保存すればよいように思えますが、ページに対してリクエストが実行されるたびに、セッションに保存されている部分的な情報をすべて読み込むことになります。セッションの情報をまったく使用せず、Ajaxリクエストで動的なドロップダウンなどを取得する場合も同じことが起こります。

影響

大きなセッション変数があると、データベースでの競合(インスタンスのアクセス競合)やCPU使用率が増えるおそれがあります。リクエストのたびにデータベースからセッションを取得し、逆シリアル化を実行する必要があるためです。ユーザー数が増えるほど変数のシリアル化と逆シリアル化のために必要な処理が増えるため、競合発生の頻度も増えます。

ベストプラクティス

大きなセッション変数は別のデータベーステーブルに保存します。セッションIDをデータの主キーとして使用します。そうすることで、データが必要なリクエストの場合にのみ大きなデータを読み込むようにできます。

  • Was this article helpful?