多数の同時に開くレコードセットで FIX 仮想メモリ リークが発生

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:312575
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
アプリケーションまたはサービスで膨大な数 (500 以上) が開かれ、頻繁に終了する同時に開くの ActiveX データ オブジェクト (ADO) レコードセットの仮想メモリ リークがメモリの断片化とメモリ不足のエラーに至るを発生する可能性があります。

この問題は任意のバージョンの Microsoft データ アクセス コンポーネント (MDAC) 2. 5 RTM (2.50.4403.12) と 2. 6 SP1 の間で発生することができます (2.61.7326.6)。 この問題は、MDAC 2. 7 では発生しません。

この問題はプロバイダー固有ではなく、SQL Server ネイティブ プロバイダー (Sqloledb.dll)、Oracle のネイティブ プロバイダー (Msdaora.dll)、ODBC プロバイダー (Msdasql.dll) をクライアント カーソル エンジンおよび共有メモリのコードを使用する任意のコンポーネントで発生することができますがされます。
原因
レコードセットがリリースされると MDAC メモリ管理ルーチンは、実際には、メモリを解放する代わりにそれらの外観として一覧に割り当てられたメモリが保存されます。 これは完全に解放し、メモリを再割り当てによるオーバーヘッドを回避します。

既定では、MDAC 2. 5 (Msdatl2.dll) と MDAC 2. 6 (Msdatl3.dll) によって使用される共有メモリ管理コードがこれらの割り当ての 500 までを保存。 VirtualFree 関数の呼び出しを通じて解放が何もその超過。

実際には、メモリが解放されないように、コーディング エラーのメモリ管理コードでは VirtualFree に不適切な呼び出しを行い。 VirtualFree からのリターン コードはチェックされませんし、アプリケーションをメモリがリークすることを示す受け取りますありません。
解決方法
この問題を解決するには、Microsoft MDAC 2. 5 の最新のサービス パックの入手します。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください:
293312[INFO] 最新の MDAC 2.5 Service Pack の入手方法
ただし、これより新しい修正ファイルがリリースされている可能性もあります:

MDAC 2. 5 SP2
   Date          Version      Size      File name        -------------------------------------------------   25-Oct-2001   2.52.8025.0   78,096   Msdatl2.dll		   25-Oct-2001   2.52.8025.0   53,520   Msdatt.dll		   25-Oct-2001   2.52.8025.0  303,376   Msdasql.dll	   25-Oct-2001   2.52.8025.0   16,384   Msdasqlr.dll   15-Nov-2001                          Q312575_MDAC25_SP2_x86_en.exe				
の MDAC 2. 5 のみ: この問題を解決するには、Windows 2000 の最新のサービス パックを入手してください。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください:
260910最新の Windows 2000 Service Pack の入手方法
MDAC 2. 6 SP1
   Date          Version      Size      File name        -------------------------------------------------   25-Oct-2001   2.61.8025.0   94,480   Msdatl3.dll	   25-Oct-2001   2.61.8025.0   24,848   Msdatt.dll	   25-Oct-2001   2.61.8025.0  307,472   Msdasql.dll	   25-Oct-2001   2.61.8025.0   16,384   Msdasqlr.dll   15-Nov-2001                          Q312575_MDAC26_SP1_x86_en.exe					

回避策
この問題を回避デザインできます、アプリケーションまたはサービス 500 未満のレコードセットが同時に開くようにします。

レジストリ内の次の設定を調整して、問題を軽減することができます:
    HKLM\Software\Microsoft\MDAC         MaxReservedBlocks    HKLM\Software\Microsoft\MDAC         ReservedMemorySize				
メモ既定でこれらのレジストリ エントリが存在しないことはし手動で追加する必要があります。 両方のエントリは、[DWORD 値です。

MaxReservedBlocks の既定値は 500 です。 この値を大きく複数のブロックは、メモリ マネージャーのルックアサイド リストに保存されます (とは、アプリケーション内の複数のメモリ使用が発生するため) が、ブロックが再利用されます。 この値を小さく場合はメモリがリークする速度を増やします。

ReservedMemorySize の既定値は 1 MB です。 ただし、これが低下パフォーマンスより多くのメモリが必要なよりは、メモリ ブロックで利用できる場合は、仮想メモリの割り当てのサイズを制限するこの値を小さくことができますです。
状況
マイクロソフトとして認識していますこの問題をこの資料の冒頭に記載されているマイクロソフト製品の問題。

MDAC 2. 5

この問題は、まず MDAC 2. 5 SP3 で修正されました。この問題は、まず Windows 2000 Service Pack 3 で修正されました。
詳細
MDAC 2. 5 では中、リークしたメモリ割り当てがだけで成り立って予約されたメモリはコミットされたページがありません (たとえば:
08230000,      Private,    1048576,     1, -RW-,          08230000, Reserve,    1048576,,       -RW- --,08330000,      Private,    1048576,     1, -RW-,          08330000, Reserve,    1048576,,       -RW- --,08430000,      Private,    1048576,     1, -RW-,          08430000, Reserve,    1048576,,       -RW- --,08530000,      Private,    1048576,     1, -RW-,          08530000, Reserve,    1048576,,       -RW- --,				
で MDAC 2. 6、リークしたメモリ割り当ての少なくとも 10 KB (65536 バイト) を格納するページをコミットする (たとえば:
1BF60000,      Private,    1048576,     2, -RW-,          1BF60000, Private,      65536,,       -RW- --,     1BF70000, Reserve,     983040,,       -RW- --,1C060000,      Private,    1048576,     2, -RW-,          1C060000, Private,      65536,,       -RW- --,     1C070000, Reserve,     983040,,       -RW- --,1C160000,      Private,    1048576,     2, -RW-,          1C160000, Private,      65536,,       -RW- --,     1C170000, Reserve,     983040,,       -RW- --,				
のどちらの場合も、パフォーマンス モニターを使って、アプリケーションやサービスを監視する仮想バイトが過度に使用を示します。
kbMDAC 予約されている仮想メモリ リーク maxreservedblocks reservedmemorysize 大きな番号レコードセット開く断片化 500 外で同時に同時に

警告: この記事は自動翻訳されています

プロパティ

文書番号:312575 - 最終更新日: 02/24/2014 06:08:56 - リビジョン: 4.1

Microsoft Data Access Components 2.5, Microsoft Data Access Components 2.5 Service Pack 1, Microsoft Data Access Components 2.5 Service Pack 2, Microsoft Data Access Components 2.6, Microsoft Data Access Components 2.6 Service Pack 1

  • kbnosurvey kbarchive kbbug kbfix kbqfe kbwin2000sp3fix kbmdac260fix kbmdac250sp3fix kbhotfixserver kbmt KB312575 KbMtja
フィードバック