Sybase Ase データベースから読み取り、新しく作成されたローカル Sybase Asa データベースに書き込むことで、レコードを転送するアプリケーションを作成しました。転送するレコードは 110.000 近くあります。
私のローカル マシンでは、アプリケーションは正常に実行されます (Windows7-32 ビット - 3GB RAM) が、開発サーバー (Windows Server 2008 - 64 ビット - 8GB RAM) では、"OUT OF MEMORY" エラーが発生します。
- レコード数は ~ 40.000 で、「ワーキング セット - プライベート」 ~ 1.800.000kb(2,8gb)
- gc の合計メモリ増分は安定しています
ここにログが流れます。
- Verbose ワーキング セット - プライベート: 507948K、GC GetTotalMemory: 49229720
- Verbose ワーキング セット - プライベート: 918620K、GC GetTotalMemory: 51377000
- Verbose ワーキング セット - プライベート: 1328568K、GC GetTotalMemory: 52245316
- Verbose ワーキング セット - プライベート: 1739128K、GC GetTotalMemory: 52978364
- Verbose ワーキング セット - プライベート: 1813940K、GC GetTotalMemory: 51567670
- メモリ不足 -
また、ローカルsybase asaデータベースを作成するためのこのバッチファイル。
set dbToolsPath=%1
set dbDirectory=%2
set scriptsDirectory=%3
set dbNameWOExtension=%4
REM Add trailing back slashes if necessary
IF NOT %dbToolsPath:~-1%==\ SET dbToolsPath=%dbToolsPath%\
IF NOT %dbDirectory:~-1%==\ SET dbDirectory=%dbDirectory%\
IF NOT %scriptsDirectory:~-1%==\ SET scriptsDirectory=%scriptsDirectory%\
set mfgDBFilePath=%dbDirectory%%dbNameWOExtension%.db
set mfgDBLogFilePath=%dbDirectory%%dbNameWOExtension%.log
REM Following four lines can be moved to code
attrib -R %mfgDBFilePath%
del %mfgDBFilePath%
attrib -R %mfgDBLogFilePath%
del %mfgDBLogFilePath%
REM TODO: Add explanation about the switches
cd /d %scriptsDirectory%
**%dbToolsPath%dbinit.exe -n -p 4096 -z 1252LATIN1 %mfgDBFilePath%
%dbToolsPath%dbspawn.exe -p dbeng10 -n WfDBServer %mfgDBFilePath%
%dbToolsPath%dbisql.exe -c "eng=WfDBServer;dbn=%dbNameWOExtension%;uid=dba;pwd=sql" -nogui PE_WfDB_MFG.sql
%dbToolsPath%dbstop.exe -c "eng=WfDBServer;uid=dba;pwd=pluto" -y**
これらは得られた知識ですが、なぜこのエラーで転送を中止したのか理解できません。私のマシンではすべて問題ありませんが、サーバーでは何が違うのでしょうか? どこで問題を探す必要がありますか? また、プライベートの増分にどのようにコメントする必要がありますか?