とまと あんらいぷ…

エンジニアの活動記録とかつぶやきとか

GitHub
スポンサードリンク

【SQL Server】Expressが遅い理由【アタッチで設定が変わる】

データベース

システム開発で大容量データを扱う時は
Oracleか、MS SQL Serverが双璧をなしてました。

今、SQL Serverはバージョン2012まで出ていますが

2003の時はひどかったですね。
データ量が1億ぐらいになると、途端に止まってしまう不安定さがありました。
なので、ビッグデータとなりえる場合はOracleを使うってのがスタンダードでした。

最近はMicrosoft SQL Serverも億を超えるデータ量でもそこそこ動くようになってきたようですね。

他にも他ベンダーのデータベースも最適化されてきて
LiteSQLとか、XMLデータベースとか、3次元DBなども登場してきましたが
それでもOracleとSQL Serverも現役です。


ちなみに私はOracleよりSQL Serverが好きです。
データをUPDATEする時の動きがどうも好きになれないんですよね。

OracleとSQL Serverの違いは、クエリの解析方法が違います。
例えばMS SQL Serverの場合、
UPDATE文にJOINを使うことで結合可能レコードのみを更新することができるけど、

Oracleの場合は更新データをWhereで絞らないと
結合できなかったデータは全部Null更新される。

これ、SQL ServerユーザーがOracleを触った時に陥る最初の罠かなと思ってます。
気をつけましょう。(根に持ってる)


さてさて、アプリケーションからデータを扱う際、データベースの選定は結構大事だと思いますが、
今回は無料で利用できるMS SQL Server Expressのお話です。


SQL Serverを選択した時点で、OSはWindowsになると思います。
で、ものすごく適当ですが
WindowsでSQLサービスが動いており、そこにアクセスしてデータのやり取りをする仕組みなんですね。
てことは、まずSQLサービスが動いてないとデータベースにアクセスできません。


まず、SQL Server Expressっていう製品は「お試しで使ってね」ってことで、
事ある毎にマイクロソフトが勝手にWindowsにインストールしようとするデータベースです。

でもそんなことすると、データベースが必要じゃない時もSQLサービスがメモリを使うもんだから
ユーザーが「遅くなった!遅くなった!」と騒ぐので、必要な時だけサービスを動かなくしたいわけですよ。

それを解消したのが「自動終了」オプションというやつなんです。


とても簡単に簡単に説明すると
SQLサービスは動いているけど、要求した時だけきちんと働いてね!!!そうじゃない時はメモリを極力使わないでそのへんで黙って寝ててね!
っていうオプション設定なんですね。

デメリットとしては、誰かがDBに要求した時だけ起きて、終わったらすぐ眠るので、都度都度の初動が遅くなります。

で、SQL Server Expressは、データベースを新しく自分で作った時はそのオプションはfalseの状態なのですが
データベースをアタッチした時は true になります。

Management Studioを開いて、データベースのプロパティ⇒オプション⇒自動⇒自動終了を見た図
NewDB20130123_2.png

多分ですが、
1.DBを作るのは開発者だから、サービスは立ち上げておこう!
2.データをアタッチするのは、ユーザーにインストールしたアプリケーションが使うSQLサービスだね!

⇒アプリケーションはずっと使わないだろうから、自動的に切るのをデフォルトにしておこう!

てな思想からくるものかと思うんですが。

開発者が他の開発者に、作業中のデータベースデータを引き渡す場合も、

デタッチ⇒DBファイルを送る⇒貰った人がアタッチ

ってことをするんですよ。

そうすると、アプリケーションがDBにデータを要求するたびに、起きたり寝たりを繰り返すので
アプリケーションの動作が極端に遅くなるんですね。

で、原因が分からず詰まる事があるかもしれないです。

SQLコマンドで変更する場合は以下のコマンドを実施

ALTER DATABASE DBNAME001 SET AUTO_CLOSE ON --自動終了 true
ALTER DATABASE DBNAME001 SET AUTO_CLOSE OFF --自動終了 false

また別記事にも書きましたがこんなトラブルも起こります。
気をつけましょう。
ユーザー <user> はログインできませんでした。 理由: 明示的に指定されたデータベースを開けませんでした。

▼この記事を読んだ方は、こんな記事も読んでいます。▼

スポンサードリンク

テーマ:日記 - ジャンル:日記

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://dalmore.blog7.fc2.com/tb.php/54-684a2095
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad