タグ付けされた質問 「sql-server」

Microsoft SQL Serverのすべてのバージョン(MySQL以外)。sql-server-2016のようなバージョン固有のタグも追加してください。これは、質問に関連することが多いためです。

2
SQL Server:TCPまたは名前付きパイプを使用するか、デフォルトを使用する必要がありますか?
同じLAN内の別のサーバー上の.NET 4クライアントアプリケーションからSQL Server 2008 R2に接続する場合、3つの異なるネットワークプロトコルを設定できます。 TCP 名前付きパイプ 接続文字列には何も設定せず、デフォルトを使用します ベストプラクティスとは何ですか?何を選ぶ? 追加情報:TCPと名前付きパイプの両方が、サーバーとクライアントの両方で有効になっています。アプリケーションはデータベースミラーリングを使用しています。クライアントとサーバーは高速LANで通信します。 まれで偽の接続とタイムアウトの問題があるため、これを調査しています。(ただし、それにもかかわらず、ベストプラクティスを知りたい)。 MSDNにはこのテーマに関する記事がありますが、非常に一般的で曖昧です。有用なアドバイスや推奨事項はありません。

6
DB階層を表示しようとすると「ロック要求のタイムアウト期間を超えました」エラー
データベースに問題があります。 通常よりはるかに遅くなりますが、基本的なクエリを実行できます。 SSMS Object Explorerでテーブル、ビュー、またはプロシージャの階層ツリーを表示しようとすると、が表示されますlock request time out period exceeded。 このデータベース内のオブジェクトで実行される私のSSRSレポートは完了していません。 このデータベースに保存されているプロシージャに関連付けられているジョブも実行されません。 私が使ってみましたsp_who2が、これは問題を解決していない、データベース上のすべての接続を見つけ、殺すために。 ここで何が起こっていますか?どうすれば解決できますか?


3
トリガーが有効な場合のレコードの削除が遅い
これは以下のリンクで解決されたと思います-回避策は動作します-しかし、パッチは動作しません。Microsoftサポートと協力して解決します。 http://support.microsoft.com/kb/2606883 わかりましたので、誰かがアイデアを持っているかどうかを確認するためにStackOverflowに捨てたい問題があります。 これはSQL Server 2008 R2でのことに注意してください 問題:15000レコードのテーブルから3000レコードを削除すると、トリガーが有効な場合は3〜4分かかり、トリガーが無効な場合は3〜5秒しかかかりません。 テーブルのセットアップ メインとセカンダリと呼ばれる2つのテーブル。セカンダリには削除するアイテムのレコードが含まれているため、削除を実行するとセカンダリテーブルに参加します。deleteステートメントの前にプロセスが実行され、削除するレコードがセカンダリテーブルに入力されます。 ステートメントを削除: DELETE FROM MAIN WHERE ID IN ( SELECT Secondary.ValueInt1 FROM Secondary WHERE SECONDARY.GUID = '9FFD2C8DD3864EA7B78DA22B2ED572D7' ); このテーブルには多くの列と約14の異なるNCインデックスがあります。トリガーが問題であると判断する前に、さまざまなことを試しました。 ページロックをオンにします(デフォルトではオフになっています) 手動で収集された統計 統計の自動収集を無効にしました 検証済みのインデックスの健全性と断片化 テーブルからクラスター化インデックスを削除しました 実行計画を調査しました(インデックスの欠落として表示されるものはなく、実際の削除にかかるコストは70%で、レコードの結合/マージには約28%でした) トリガー テーブルには3つのトリガーがあります(挿入、更新、削除の各操作に1つ)。削除トリガーのコードを変更して、単に戻るようにした後、1つを選択して、トリガーされる回数を確認しました。操作全体で1回だけ起動します(予想どおり)。 ALTER TRIGGER [dbo].[TR_MAIN_RD] ON [dbo].[MAIN] AFTER DELETE AS SELECT 1 RETURN 要点をまとめると トリガーがオンの場合-ステートメントの完了には3〜4分かかります トリガーがオフの場合-ステートメントの完了には3〜5秒かかります …

4
TVFにラップすると、このクエリが大幅に遅くなるのはなぜですか?
数秒で実行されるかなり複雑なクエリがありますが、テーブル値の関数にラップすると、はるかに遅くなります。実際には終了させて​​いませんが、終了せずに最大10分間実行されます。唯一の変更点は、2つの日付変数(日付リテラルで初期化された)を日付パラメーターに置き換えることです。 7秒で実行 DECLARE @StartDate DATE = '2011-05-21' DECLARE @EndDate DATE = '2011-05-23' DECLARE @Data TABLE (...) INSERT INTO @Data(...) SELECT... SELECT * FROM @Data 少なくとも10分間実行 CREATE FUNCTION X (@StartDate DATE, @EndDate DATE) RETURNS TABLE AS RETURN SELECT ... SELECT * FROM X ('2011-05-21', '2011-05-23') 以前にRETURNS @Data TABLE(...)句を使用して関数をマルチステートメントTVFとして記述しましたが、インライン構造のそれを交換しても目立った変更はありませんでした。TVFの長い実行時間は実際のSELECT * FROM X時間です。実際にUDFを作成するには数秒かかります。 …

2
展開後スクリプトで:r SQLCMDコマンドが間違っているとマークされるのはなぜですか?
ポストポストスクリプトを数回使用し、ビルドアクション "PostDeploy"を常に直感的に使用しました。これで初めて、スクリプトのテンプレートから組み込みの命令に従って":r somescript.sql"構文を使用しようとしました。 すぐにこの行は間違っているとマークされています: 「 ':'の横にあるSQL80001の構文が間違っています」 PDSをビルドアクション「なし」に設定する提案を見つけました。これは役に立たず、エラーは残ります。ここに何が欠けていますか?

2
SQL Serverユーザーを「ボリュームメンテナンスタスクの実行」に追加すると、データベースのサイズ変更の速度が大幅に向上するのはなぜですか?
5GBデータベースを作成したい場合 CREATE DATABASE [test] CONTAINMENT = NONE ON PRIMARY ( NAME = N'test', FILENAME = N'E:\2012\test.mdf' , SIZE = 5529600KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'test_log', FILENAME = N'E:\2012\test_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%) SSD では1分かかります。 しかし、SQL Serverユーザーを Perform volume maintenance tasks …

2
SQL Serverでは、読み取りロックはどのように機能しますか?
次の長時間実行クエリがあるとします UPDATE [Table1] SET [Col1] = 'some value' WHERE [Col2] -- some clause which selects thousands of rows 上記のクエリの実行中に次のクエリが実行されると仮定します SELECT * FROM [Table1] 最初のクエリは、最初のクエリが完了するまで2番目のクエリの実行を妨げますか?その場合、最初のクエリは、2番目のクエリがすべての行またはWHERE句に含まれる行だけで実行されるのを防ぎますか? 編集: 2番目のクエリが SELECT [Col1], [Col2] FROM [Table1] WHERE [Col2] -- some clause whose matching elements overlap those from -- the clause in the first query and …

1
適切なSQL Serverバックアップスケジュールとは何ですか?
バックアップタスクの設定プロセスに関する情報は豊富にあるようですが、データベースバックアップの全体像に関する情報はあまりありません。少なくとも、その情報を提供する検索エンジンクエリを作成するのは困難です。バックアップには次の3種類があります。 データベース全体のバックアップ 差分データベースバックアップ トランザクションログのバックアップ 3つすべてを使用することになっているようです。それで、これは理にかなっているスケジュールですか? 毎月1日 -データベースの完全バックアップを行います。 毎日深夜0時 -差分データベースバックアップを実行します。 15分ごと -トランザクションログのバックアップを行います。 このように、たとえば12日にデータベースに障害が発生した場合、1日目からデータベースの完全バックアップを復元し、1日目から12日目に12回の差分バックアップを実行し、最後に最新のトランザクションログを復元します(トランザクションログの差分?)。 最後に、データベースの完全バックアップは自己完結型ですか?つまり、2月1日にデータベースの完全バックアップを作成したら、1月からすべてのファイルを削除できますか?もちろん、念のため、前の2か月のセットを保持しますが、質問は概念的なものです。

2
関数/ストアドプロシージャの作成時のスキーマチェックの無効化
SQL Server 2008 R2データベースへの変更を実行するプロセスを自動化しようとしています。配置したプロセスは、ストアドプロシージャと関数を削除して再作成し、スクリプトを実行してテーブル/列/データを変更します。残念ながら、スクリプトの1つでは、最初に機能の1つを配置する必要があります。しかし、最初にテーブル/列/データ変更スクリプトから追加される列に依存するため、最初にすべてのストアドプロシージャ/関数の変更を実行することはできません。 SQL Serverが関数/ SPの定義で使用される列を検証せずにストアドプロシージャと関数を実行できるかどうか疑問に思っていましたか?探してみましたが、これを有効にする条件またはコマンドが見つかりませんでした。


3
ほとんどの句で列エイリアスの使用を許可しないような方法でクエリが解析されるのはなぜですか?
クエリを記述しようとすると、SQL Serverはクエリを実行するときにSELECTを解析する前に、クエリ内のWHEREを解析する(難しい方法)ことがわかりました。 MSDNドキュメントは、一般的な論理解析順序はSELECTは(したがって、「そのようなオブジェクト[別名」エラーは他の句の列別名を使用しようとしない場合に得られた)、ほぼ最後に解析されるようなものであると言います。エイリアスをどこでも使用できるようにする提案もありましたが、MicrosoftチームはANSI規格への準拠の問題を挙げてこれを打ち倒しました(この動作はANSI規格の一部であることを示唆しています)。 プログラマー(DBAではない)として、この動作がやや紛らわしいことに気づきました。列エイリアスを持つという目的を大幅に無効にしているように思われるためです(少なくとも、列エイリアスは、実際にエイリアスを使用できる場所はORDER BY のみであるため、クエリの実行の早い段階で解析されます)。プログラマーとしては、クエリをより強力で便利に、そしてDRYにする大きな機会を逃しているようです。 それは理にかなっているほど明白な問題のように見えますが、SELECTとORDER BY以外では列エイリアスを許可しないことを決定する他の理由がありますが、それらの理由は何ですか?
16 sql-server  alias 

2
SQL Serverに使用可能な物理メモリが残っていない場合はどうなりますか?
グーグル検索中に、矛盾する情報を見つけました。 一部のサイトでは、データ用の物理メモリが残っていない場合、SQL Serverは既存のデータをTEMPDBに移動すると述べています(SQL Server:TempDbの説明と推奨事項を参照)。 しかし、他のサイトでは、十分な物理メモリが残っていない場合、オペレーティングシステムがPAGE FILEを使用して物理メモリからデータをそこに移動できると述べています(SQL Serverのページファイルを参照)。 SQL Serverが物理メモリを使い果たしたときにデータを書き込む場所はどこでしょうか?tempdbまたはOSページファイルに?それとも両方とも?

2
必要以上に大きい列サイズを使用する
他の人とSQL Serverデータベースを作成しています。テーブルの1つは小さく(6行)、データはおそらく一定のままです。新しい行が追加される可能性はほとんどありません。テーブルは次のようになります。 CREATE TABLE someTable ( id int primary key identity(1,1) not null, name varchar(128) not null unique ); INSERT INTO someTable values ('alice', 'bob something', 'charles can dance', 'dugan was here'); 私はそのname列の文字の長さを調べていますが、その値はおそらく32文字を超えることは決してなく、おそらく24文字を超えることはないと思います。この列を変更する利点はありますか、たとえば、varchar(32)? また、デフォルトの列サイズを4、8、32などの倍数に維持することには利点がありますか?

2
SQLステートメントは、SQL Serverの単一セッション内で同時に実行できますか?
一時テーブルを使用するストアドプロシージャを作成しました。SQL Serverでは、一時テーブルはセッションスコープであることを知っています。ただし、セッションで何ができるかについての明確な情報を見つけることができませんでした。特に、このストアドプロシージャが1つのセッションで2回同時に実行できる場合、2つの実行が一時テーブルを共有するため、そのプロシージャ内のトランザクションには非常に高い分離レベルが必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.