499266 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

Road to DBD

Road to DBD

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

カレンダー

カテゴリ

バックナンバー

2024.05
2024.04
2024.03
2024.02
2024.01

キーワードサーチ

▼キーワード検索

プロフィール

ジャムシード

ジャムシード

コメント新着

mayggW@ продвижение раскрутка сайта договор Заказать seo поисковую оптимизацию сайт…
通りすがりプログラマー@ Re:複数テーブルによるUPDATE(02/11) 随分前の記事にコメント失礼します。 rown…
ワンコ0995@ Re:包含データベース(06/02) ((データベース)データベース,)デー…
しぐしぐ@ Re:TOP 100 PERCENT(05/08) お世話になっております。 最近、旧システ…
ハニー@ Re:INSTEAD OFトリガの限界(07/16) 1SQLでやらずに変数に入れればいいじゃん
2008.06.04
XML
カテゴリ:DB-SQL Server

今日、「この計表を期間1年で出したのはまずかったですかねぇ」と言われて、行ってみると.NETのエラーが表示されていた。よく見ると、CLRがメモリ不足により異常終了したとのメッセージ。
このCLRは、IEに対してExcelに吐き出すVBScriptを生成して返すものだが、まさかこんなメッセージが出るとは思わなかった。

一体どれくらいのデータを返そうとしたのか、対象のストアドを実行してみると、50000件×40列。そう、この計表は明細データを出力するので、1年くらいの期間で取ると、これぐらいになってしまう。盲点だった。
CLRにしたということは、まとめて返す文字列はいったん全部メモリにため込まれてしまうということらしい。
64ビットとはいえ、WindowsもSQL ServerもStandardでメモリは4GBしか積まれていない。
SQL Serverのログを見てみると、
「A significant part of sql server process memory has been paged out. This may result in a performance degradation.」というメッセージの次に、CLRが叩き落されていた。このメッセージはメモリ使用量が45%を超えると出るらしい。メモリコントロールのソリューションを取るほどそもそもメモリがない。
実際、5万件の入力チェックリストを出力することはあり得ないのだが、それにしてもこのまま放置しておくのは危険なので、あまり大量なデータを返さないように制約を掛けるしかなさそうだ。

昔、JavaでCSVを吐くという処理を書いたときに、StringBufferに20MBもため込んだら、「Out Of Memory」を返されたのを思い出した。環境次第とはいえ、今回のCLRもStringBuilderにため込んでいたわけだから、同じような事象のわけで。。うーん。






お気に入りの記事を「いいね!」で応援しよう

最終更新日  2008.06.04 02:38:33
コメント(0) | コメントを書く
[DB-SQL Server] カテゴリの最新記事



© Rakuten Group, Inc.