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

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

4
2つのテーブルを相互に検証する簡単な方法
ETLプロセスを行っています。すべてを言い終えると、同一のテーブルがたくさんあります。(2つの異なるサーバー上の)それらのテーブルが実際に同一であることを確認する最も簡単な方法は何ですか。私はスキーマとデータの両方を話しています。 個々のファイルまたはファイルグループでできるように、テーブルでハッシュを実行できますか?Red-Gateのデータ比較がありますが、問題のテーブルにはそれぞれ数百万の行が含まれているため、もう少しパフォーマンスの高いものが欲しいです。 私の興味を引く1つのアプローチは、組合声明のこの創造的な使用です。しかし、可能であれば、ハッシュのアイデアをもう少し詳しく調べたいと思います。 回答の更新後 将来の訪問者のために...ここに私が取った正確なアプローチがあります。これは非常にうまく機能し、各データベースのすべてのテーブルで実行しています。私を正しい方向に向けてくれた以下の回答に感謝します。 CREATE PROCEDURE [dbo].[usp_DatabaseValidation] @TableName varchar(50) AS BEGIN SET NOCOUNT ON; -- parameter = if no table name was passed do them all, otherwise just check the one -- create a temp table that lists all tables in target database CREATE TABLE #ChkSumTargetTables ([fullname] varchar(250), [name] …

1
SQL Server 2005からSQL Server 2012へのアップグレード
次のテスト環境をセットアップしています。 仮想マシン(Hyper-V) Windows Server 2008 R2 SP1(x64ビット) Windows SQL Server 2005 Developer Edition SP4(x64ビット)(デフォルトのインスタンス名) マージレプリケーションが設定された1つのデータベース...それぞれ2つのサブスクライバを持つ3つのパブリケーション。 SQL Server 2012 Developer Edition(sp1)へのアップグレード手順をテストしています... 64ビットSQL Server 2012開発用のisoをダウンロードしました。(sp1)MSDN(フルライセンスコピー)からアップグレードパスを開始しました。さまざまな基準のチェックを開始する最終段階の1つで、以下に概説する奇妙な問題に遭遇します。 Rule "Upgrade architecture mismatch" failed. The CPU architectures of upgrading feature(s) are different. To upgrade these features, Setup architecture must be the same as the features being …

2
ETL:200のテーブルから抽出-SSISデータフローまたはカスタムT-SQL?
私の分析に基づいて、データウェアハウスの完全な次元モデルでは、200を超えるソーステーブルから抽出する必要があります。これらのテーブルの一部は増分ロードの一部として抽出され、他のテーブルは全ロードになります。 注目に値するのは、すべて同じスキーマを持つ約225のソースデータベースです。 私が見てきたことから、OLE DBソースとOLE DB宛先を使用してSSISで単純なデータフローを構築するには、設計時に列とデータ型を決定する必要があります。つまり、最終的には抽出だけのために200以上のデータフローが発生することになります。 保守性の観点から、これは大きな問題として私を襲います。抽出コードに何らかの抜本的な変更を加える必要がある場合、200の異なるデータフローを変更する必要があります。 代替オプションとして、メタデータテーブルのセットから抽出するソースデータベース、テーブル名、および列を読み取る小さなスクリプトを作成しました。コードは複数のループで実行され、動的SQLを使用して、リンクサーバーとOPENQUERYを介してソーステーブルから抽出します。 私のテストに基づいて、これはまだOLEDBのソースと宛先でSSISデータフローを使用するほど高速ではありません。だから私は私がどんな種類の選択肢を持っているのかと思っています。これまでの考えは次のとおりです。 EZAPIを使用して、シンプルなデータフローでSSISパッケージをプログラムで生成します。抽出するテーブルと列は、前述の同じメタデータテーブルから取得されます。 サードパーティソフトウェア(動的データフローコンポーネント)を購入する これにアプローチする最良の方法は何ですか?.NETプログラミングに関しては、私は初心者なので、基本だけで立ち上がるのに必要な時間も心配です。


1
大容量メモリ環境でのSQL Server TempDBの動作
この質問を読んで、私が少し前に持っていた質問を思い出しました。 512 GBのRAMを搭載したSQL Serverがあり、メインデータベースは450 GBです。TempDBには非常に多くのアクションがあります(わかりました、「かなり多くのアクション」だと思います-そうでないかもしれません!)。RamDisk Plus Serverのデモ版をインストールし、50GBのRAMドライブを作成し、TempDBを指定しましたが、パフォーマンスの改善はまったく見られませんでした。 TempDBへの書き込みは常にディスクへの実際の物理的な書き込みになりますか、それともWindowsファイルシステムキャッシュのような遅延書き込みのためにSQL ServerによってTempDBの書き込みがキャッシュされますか? このシナリオではラムディスクは無意味ですか? SQL Server 6.5がTempDB-In-Ramをサポートしていたことは知っていますが、それはずっと前に廃止されたようです!

1
ミラーリング-サーバーのネットワークアドレスに到達できません
SQL Server 2008 R2がインストールされています。3つのインスタンスが含まれています。 デフォルト(MSSQLServer) 最初のインスタンス 2番目のインスタンス これらはすべて、ネットワークサービスとしてログオンです。 デフォルトのインスタンスはプリンシパルサーバーです。最初のインスタンスはミラーリングです。2番目のインスタンスは監視サーバーです。 最初に、プリンシパルデータベースのフルバックアップとトランザクションログバックアップを取得しました。同じデータベース名を保持して最初のインスタンスに復元し、リカバリ状態はリカバリなしです 最後に、ミラーリングを開始しましたが、次に示す2つのエラーメッセージが表示されます。

2
このクエリで非クラスター化インデックスが使用されないのはなぜですか?
クエリパフォーマンスの向上に関するこの質問に続き、デフォルトでインデックスを使用する方法があるかどうかを知りたいと思います。 このクエリは約2.5秒で実行されます。 SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31'; これは約33msで実行されます。 SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31' ORDER BY [DateEntered], [DeviceID]; [ID]フィールド(pk)にクラスター化インデックスがあり、[DateEntered]、[DeviceID]に非クラスター化インデックスがあります。最初のクエリはクラスター化インデックスを使用し、2番目のクエリは非クラスター化インデックスを使用します。私の質問は2つの部分です。 なぜ、両方のクエリに[DateEntered]フィールドにWHERE句があるため、サーバーは2番目ではなく最初のクラスター化インデックスを使用するのですか? orderbyがなくても、このクエリでデフォルトで非クラスタ化インデックスを使用するにはどうすればよいですか?(または、なぜそのような振る舞いを望まないのでしょうか?)

4
SQL Server 2012は、テーブル名と列名を[括弧]で囲んでいます
Columnsフォルダーをエディターウィンドウにドラッグすると、列の完全なリストがブラケットなしで追加されます。列を個別にドラッグすると、ブラケットが表示されます。 とにかくそれをオフにする方法はありますか?私はオプションに何も見つけることができず、それらは本当に注意散漫です。

2
ユーザーが自分のスキーマ内で何でもできるようにするが、スキーマ自体を作成または削除しない
SQL Azureでスキーマを作成し、データベースロールに次のアクセス許可を付与しました。 CREATE ROLE myrole AUTHORIZATION dbo; EXEC sp_addrolemember 'myrole', 'myuser'; CREATE SCHEMA myschema AUTHORIZATION dbo; GRANT ALTER, CONTROL, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW DEFINITION ON SCHEMA::myschema TO myrole; GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole; 上記で定義したアクセス許可により、myuser自分のスキーマを作成/削除できるため、問題を克服するために、ALTER ANY SCHEMAアクセス許可を試しました。しかし、この許可はユーザーがテーブルを作成/削除することも拒否します。 ユーザーが自分のスキーマ内で何でもできるが、スキーマ自体を作成または削除できないようにするには、どのような権限が必要ですか?

3
主キーの代わりにカバー列を持つ一意の非クラスター化インデックスを使用することの意味
私たちは、大きなテーブル持っている[MyTable]現在の両方Aを有しPrimary Key、かつUnique Non Clustered Index同じ列に([KeyColumn])。U NCインデックスには、追加のカバー列もあります。 同じ列にPKと一意のNCインデックスの両方があることは冗長に思えるので、主キーを削除し、代わりに参照整合性の目的で一意の非クラスタ化インデックスを使用することを検討していました。 テーブルは別の列によって完全にクラスター化されることに注意してください。 つまり、次のとおりです。 ALTER TABLE [MyTable] ADD CONSTRAINT [PK_MyTable] PRIMARY KEY NONCLUSTERED ([KeyColumn]) GO そして CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex] ON [MyTable] ([KeyColumn]) INCLUDE ([Column1], [Column2]) GO 私の知る限り、主キーにカバー列を追加することはできないため、次のことを行います。 依存する外部キー制約の削除 MyTable.KeyColumn 主キーをMyTable.KeyColumn完全にドロップします テーブルに外部キーを再追加します(RIはを介して強制されますMyTable.KeyColumn) これを考えることができる唯一の意味は、ERDダイアグラムに視覚的なキーシンボルが表示されず、列が含まれているため(リーフ)インデックス密度が低くなるということです。 /programming/487314/primary-key-or-unique-indexを読んで、これを行うことの整合性とパフォーマンスの側面に満足しています。 私の質問は次のとおりです。このアプローチには欠陥がありますか? 私が達成しようとしていることを編集します:パフォーマンス最適化と春の掃除。PKまたはインデックスのいずれかを削除すると、インデックスに必要なページが少なくなり、書き込みが高速になり、さらにメンテナンス/運用上の利点が得られます。 これにいくらかの背景を置くために、私はこれまでに、PKなしで参照されているテーブルを持っていませんでした。ただし、列をカバーするNCインデックスがテーブルに追加されたという事実は、自分の考え方を適応させる必要があることを意味します。


3
ORDER BYが2つのテーブルをEXCEPTの前(遅い)にソートし、後(速い)にソートしないのはなぜですか?
SQL Server 2008 R2クエリオプティマイザーパズル 2つのテーブルがあり、どちらにも900万行が含まれています。70.000行は異なり、他は同じです。 これは高速、13秒です。 select * from bigtable1 except select * from similar_bigtable2 これにより出力がソートされ、13秒も高速になります。 select * into #q from bigtable1 except select * from similar_bigtable2 select * from #q order by sort_column これは非常に遅いですが、 ;with q as ( select * from bigtable1 except select * from similar_bigtable2 ) select …

3
PostgreSQL初期データベースサイズ
私の質問には2つの部分があります。 PostgreSQLのデータベースの初期サイズを指定する方法はありますか? 存在しない場合、データベースが時間の経過とともに大きくなった場合の断片化にどのように対処しますか? 最近、MSSQLからPostgresに移行しました。データベースを作成するときにMSSQLの世界で行ったことの1つは、データベースとトランザクションログの初期サイズを指定することでした。これにより、特にデータベースの「通常の」サイズが事前にわかっている場合、断片化が減少し、パフォーマンスが向上します。 サイズが大きくなると、データベースのパフォーマンスが低下します。たとえば、私がそれを実行しているワークロードは通常10分かかります。データベースが大きくなると、この時間が長くなります。VACUUM、VACUUM FULL、およびVACUUM FULL ANALYZEを実行しても問題は解決しないようです。パフォーマンスの問題を解決するのは、データベースを停止し、ドライブの断片化を解消してから、VACUUM FULL ANALYZEを実行すると、テストのパフォーマンスが元の10分に戻ります。これは、断片化が痛みの原因であると疑うことにつながります。 Postgresでテーブルスペース/データベーススペースを予約するための参照を見つけることができませんでした。間違った用語を使用しているため何も見つからないか、Postgresでファイルシステムの断片化を緩和する別の方法があります。 ポインタはありますか? ソリューション 提供された回答は、私が疑い始めたことを確認するのに役立ちました。PostgreSQLはデータベースを複数のファイルに保存します。これにより、断片化の心配なしにデータベースを拡張できます。デフォルトの動作では、これらのファイルをテーブルデータでいっぱいにパックします。これは、ほとんど変更されないテーブルには適していますが、頻繁に更新されるテーブルには適していません。 PostgreSQLはMVCCを使用して、テーブルデータへの同時アクセスを提供します。このスキームでは、更新ごとに更新された行の新しいバージョンが作成されます(これはタイムスタンプまたはバージョン番号を使用している可能性があります)。古いデータはすぐには削除されませんが、削除のマークが付けられます。実際の削除は、VACUUM操作が実行されるときに発生します。 これは曲線因子とどのように関係しますか?テーブルのデフォルトのフィルファクター100はテーブルページを完全にパックします。つまり、テーブルページ内に更新された行を保持するスペースがないことを意味します。つまり、更新された行は元の行とは異なるテーブルページに配置されます。私の経験が示すように、これはパフォーマンスに悪いです。サマリーテーブルは非常に頻繁に更新されるため(最大1500行/秒)、20のFILL FACTORを設定することを選択しました。つまり、テーブルの20%が挿入行データ用で、80%が更新データ用です。これは過度に思えるかもしれませんが、更新された行のために予約された大量のスペースは、更新された行が元のページと同じページ内に留まり、autovacuumデーモンが古い行を削除するまでにテーブルページがいっぱいにならないことを意味します。 データベースを「修正」するために、次のことを行いました。 サマリーテーブルのFILL FACTORを20に設定します。作成時にこれを行うには、パラメーターをCREATE TABLEに渡すか、ALTER TABLEを介してファクトの後に渡します。次のplpgsqlコマンドを発行しました。ALTER TABLE "my_summary_table" SET (fillfactor = 20); VACUUM FULLを発行しました。これにより、完全に新しいバージョンのテーブルファイルが書き込まれ、含意により新しいフィルファクターで新しいテーブルファイルが書き込まれます。 テストを再実行すると、数百万行のデータベースが必要な大きさであっても、パフォーマンスの低下は見られません。 TL; DR-ファイルの断片化は原因ではなく、表スペースの断片化でした。これは、特定のユースケースに合わせてテーブルのFILL FACTORを調整することで軽減されます。


4
Integration Servicesを使用せずにメンテナンスプランをエクスポートできますか?
SQL Serverインスタンスから簡単なメンテナンスプランをエクスポートしようとしています。 ソース管理へのエクスポートをチェックし、エクスポートされた保守計画を機能的に同一のインスタンスに適用します。 StackOverflowとSQL Server Newbieは、Integration Servicesを使用して保守計画をエクスポートすることをお勧めします。 エクスポートターゲットでIntegration Servicesに接続しようとすると、次のエラーが表示されます。 コンピューター「WEBSERVER」上のIntegration Servicesサービスへの接続が次のエラーで失敗しました:指定されたサービスはインストールされたサービスとして存在しません。 このボックスは、コンシューマアプリケーションにデータを提供するためだけに使用するため、WEBSERVERでIntegration Servicesを無効にすることにしました。WEBSERVER上のすべてのデータは、バックエンドインスタンスから複製されます。Integration Servicesは、バックエンドインスタンスでデータを処理するために頻繁に使用されます。 Integration Servicesを使用せずに保守計画をエクスポートする文書化された方法はありますか?マイクロソフトはサポートしていますか?

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