トップページへ PASSJ ブログへ
トップページへ
分科会
特集!
コミュニケーション
資格
セミナー・コンファレンス
インフォメーション
開発者必見! 覚えておきたいSQL Serverの便利機能
文=株式会社システムインテグレータ 堀 真人
第4回
SQL Server 転ばぬ先の杖!
日々の開発作業にあたって、開発効率を上げるコツは第一に『無用なトラブルを避けること』。今回は、SQL Server初心者がつまづきがちな部分について、その理由と回避方法を説明していきましょう。
Tips 1

コネクションの亡霊を切断!


開発中のプログラムで間違って無限ループを作ってしまったりすると、プログラムを停止した後も、データベースへのコネクションが「亡霊」のように残ってしまいます。これを放置すると、コネクションが大量に残ったり、データがロックされたままになったりと、やっかいなものです。この問題はOracleでもSQL Serverでも同じです。

Oracleでコネクションを切る場合には、V$SESSIONで確認した後に、ALTER SYSTEM KILL SESSIONで切断します。SQLServerの場合は、システムプロシージャの「SP_WHO」コマンドで接続中ユーザーの一覧を表示します。こうすると、たとえば「59番のコネクションが残っている」というような具体的な情報がわかるので、「Kill 59」と入力してコネクションを強制切断すればよいのです。

亡霊セッションがロックしていたから動かなかった、なんてことがないようにSP_WHOとKILLを覚えておきましょう。

■ 「SP_WHO」コマンドで接続中ユーザーの一覧を表示
(図)「SP_WHO」コマンドで接続中ユーザーの一覧を表示


Tips 2

1レコード8060バイトの壁


SQL Serverでは、一行のデータサイズは8060バイトを超えることができません。この制限に気づかないで、考え込んでしまう初心者はよくいるもの。文章を登録するプログラムでは、1レコードが8060バイトを超えることもありがちです。

気をつけるべきところは、「8060バイトを超えるレコードを定義することはできる」という点です。たとえば以下のようなテーブルは作成できます。

●「論文」テーブル

[文章ID] [NVARCHAR] (10)
[著者] [NVARCHAR] (50)
[タイトル] [NVARCHAR] (200)
[本文] [NVARCHAR] (4000)


このテーブルに対して小さい論文をたくさん登録するような場合に、「あるレコードにINSERTはできるが、追記していったら突然エラーになった」という形で初めてこの制限を知るケースがあるようです。

このテーブルはNVARCHARで4260文字ですから、合計8520バイトのレコードができるわけです。NVARCHARは可変長ですから、本文が短ければ何も問題はありません。しかし、全列に最大文字数を入れることはできません。入れようとすると以下のエラーが出ます。

「1 行のサイズ 8335 が許容最大値 8060 を超えているので作成できません。」

TEXT型などの大容量データタイプを使えば、この制限は越えられますが、TEXT型はWHERE句の条件に指定できないなどの制限がありますから、全文検索を利用することはできません。この制限を十分に考慮して設計すべきでしょう。



Tips 3

ロックエスカレーション機能


Oracleは行単位のロックが確保されています。どれだけロックが増えても行単位でロックが確保される分、ロックが多いときにはリソースを消費します。SQL Serverも基本は行ロックですが、システムのリソースが少なくなると、複数の行ロックを1つのテーブルロックに切り替えることで、メモリを開放しようとします。これは、「ロックエスカレーション機能」と呼ばれています。

SQL Serverでは、ロックの単位は、行、テーブル、インデックスのページ単位と、粒度の違うロック方式を選んで使えるようになっています。SQLヒントを指定して明示的にロックを選択できます。

ロックがエスカレーションすると、1ユーザーのロック範囲が広がるために、アプリケーションの同時実効性が失われていきます。とはいえ、よほどリソース不足にならない限りエスカレーションはおきませんから、同時ロック数の少ないアプリケーション設計を心がけるべきでしょう。




・ 第1回 SQL クエリアナライザのクエリ実行機能
・ 第2回 SQL クエリアナライザ Part 2
・ 第3回 開発者のための、日常的バックアップの小ワザ
・ 第4回 SQL Server 転ばぬ先の杖!
・ 第5回 エラーをやっつけろ!
・ 第6回 SQL構文の違いを押さえる!
・ 第7回 Transact-SQLをマスターしよう!
・ 第8回 パフォーマンス監視ノウハウ


著者プロフィール
株式会社システムインテグレータ
堀 真人(HORI, Masato)

http://www.sint.co.jp/

新横浜で2年半Oracleを使い、埼玉に飛んでからはSQLServerと戦う毎日を送る“DBバイリンガル”な27歳。
ITとは、「アイデアを支えるテクノロジー」と心得る。
趣味はレゲエとSQL Server。愛読書はレゲエ専門誌「Riddim」とデータベース専門誌「DBマガジン」。

← 特集!DBバイリンガル 目次

PASSJメールニュース 著作権ついて プライバシーポリシー リンクポリシー お問い合わせ
(C) 2005 Professional Association for SQL Server Japan. All rights reserved.