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

SQL Server 2008(メジャービルドバージョン10.00.xxxx)。また、sql-serverでタグ付けしてください。

4
SSD上のSQL Serverデータベース-テーブルごとに個別のファイルを使用する利点はありますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 約30のテーブルがあるデータベースを作成しています。各テーブルには数千万の行が含まれ、各テーブルには単一の重要な列とプライマリ/外部キー列が含まれ、重い場合でもクエリの効率を最大限に高めます。更新と挿入を行い、クラスター化インデックスを多用します。2つのテーブルには可変長のテキストデータが含まれ、そのうちの1つには何億もの行が含まれますが、残りのテーブルには数値データのみが含まれます。 使用可能なハードウェア(約64 GBのRAM、非常に高速なSSD、および16コア)からパフォーマンスの最後の一滴を絞り出したいので、各テーブルに独自のファイルを持たせることを考えていました。 2、3、4、5、またはそれ以上のテーブルに参加しています。各テーブルは常に個別のスレッドを使用して読み取られ、各ファイルの構造はテーブルの内容と密接に調整されます。 SQL Serverが特定のテーブルの内容に追加するため。 1つの注意点は、SQL Server 2008 R2 Web Editionにこだわっています。これは、自動水平分割を使用できないことを意味します。これにより、パフォーマンスの向上として除外されます。 テーブルごとに1つのファイルを使用すると、実際にパフォーマンスが最大化されますか、それとも冗長になるビルトインSQL Serverエンジンの特性を見落としていますか? 次に、テーブルごとに1つのファイルを使用するのが有利な場合create table、特定の論理ファイルではなくファイルグループにテーブルを割り当てるオプションしか提供されないのはなぜですか?そのため、シナリオ内のすべてのファイルに対して個別のファイルグループを作成する必要があります。これは、SQL Serverが、提案していることを実行することで得られる利点を想定していないことを示唆しています。

5
SQL:CPUまたはIOでない場合、INSERTの速度が低下するのは何ですか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 書き込みが多い製品のデータベースがあります。SSDを備えた新しいサーバーマシンを購入しました。驚いたことに、挿入ははるかに遅いストレージを備えた古いマシンよりも高速ではありませんでした。ベンチマーク中に、SQL Serverプロセスが示すIOレートが非常に低いことがわかりました。 たとえば、ループの周りにBEGIN TRANとCOMMITを追加したことを除いて、このページにあるスクリプトを実行しました。せいぜい、ディスク使用量が7Mb / sに達するのを見ることができましたが、CPUはほとんど5%に触れませんでした。サーバーには64Gbがインストールされており、10を使用しています。合計実行時間は、最初の呼び出しでは2分15秒、その後の呼び出しでは約1分でした。データベースは単純なリカバリであり、テスト中はアイドル状態でした。各呼び出しの間にテーブルを削除しました。 なぜこのような単純なスクリプトがそんなに遅いのですか?ハードウェアはほとんど使用されていません。専用ディスクベンチマークツールとSQLIOの両方は、読み取りと書き込みの両方でSSDが500Mb / s以上の速度で正しく実行されることを示しています。ランダム書き込みはシーケンシャル書き込みよりも遅いことを理解していますが、クラスター化インデックスを持たないテーブルへのこのような単純な挿入は、はるかに高速になると予想されます。 最終的に、このシナリオははるかに複雑ですが、最初に単純なケースを理解する必要があると感じています。簡単に言うと、アプリケーションは古いデータを削除し、SqlBulkCopyを使用して新しいデータをステージングテーブルにコピーし、フィルター処理を実行し、最後にMERGEおよび/またはINSERT INTOを使用してデータを最終テーブルにコピーします。 ->編集1:Martin Smithによってリンクされた手順に従い、次の結果が得られました。 [Wait Type] [Wait Count] [Total Wait (ms)] [T. Resource Wait (ms)] [T. Signal Wait (ms)] NETWORK_IO 5008 46735 46587 148 LOGBUFFER 901 5994 5977 17 PAGELATCH_UP 40 866 865 1 SOS_SCHEDULER_YIELD 53279 …

6
インデックスの再編成中にトランザクションログがいっぱいになるのを防ぐ方法
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 トランザクションログのサイズを50 GBに事前に割り当てた複数のマシンがあります。再編成しようとしているテーブルのサイズは55〜60 GBですが、継続的に増加します。私が再編成したい主な理由は、スペースを再利用することであり、それによるパフォーマンス上の利点は追加のボーナスです。 テーブルの断片化レベルは30〜35%です。これらのマシンの一部では、「トランザクションログがいっぱいです」エラーが発生し、再編成が失敗します。トランザクションログのサイズは最大48GBに達します。これに対抗する良い方法は何ですか?自動インクリメントをオンにしていません。これを行うのは嫌です。 ログサイズをより大きな値に増やすことはできますが、将来テーブルサイズが大きくなると、値が十分ではなくなる可能性があります。また、ログサイズを均等に増やしようとすると、スペースを再利用するために再編成を行う目的が無効になります。これに効果的に対処する方法についてのアイデアはありますか?データ損失は許容されないため、バルクモードの使用はオプションではありません。

4
2つのテーブルまたはクエリ間で異なる行を簡単に表示する
同一のデータを持つ/返すことになっている2つの異なるテーブル/クエリがあるとします。これを確認します。次の例のように、各テーブルの一致しない行を表示して、すべての列を比較する簡単な方法は何ですか?テーブルには30個の列があり、その多くがNULL可能であると仮定します。 PKがない場合、またはPKごとに重複がある可能性がある場合、PK列だけで結合するだけでは十分ではなく、NULLを適切に処理する30の結合条件と厄介なWHERE条件でFULL JOINを実行する必要があります一致した行を除外します。 通常、問題が最悪であり、PKが論理的に使用可能になる可能性が非常に低いのは、スクラブされていないデータまたは完全に理解されていないデータに対して新しいクエリを作成するときです。問題を解決する2つの異なる方法を作成し、その結果を比較します。違いは、気づいていないデータの特殊なケースを強調しています。 結果は次のようになります。 Which Col1 Col2 Col3 ... Col30 ------ ------ ------ ------ ------ TableA Cat 27 86 -- mismatch TableB Cat 27 105 -- mismatch TableB Cat 27 87 -- mismatch 2 TableA Cat 128 92 -- no corresponding row TableB Lizard 83 NULL -- no corresponding …

3
SQL Serverログファイルの縮小はパフォーマンスにどのように影響しますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 サイズが2GBのデータファイルを持つSQL Server 2008データベースがありますが、ログファイルは8GBを超えています。2008年以前のデータベースでは、「バックアップログ」とTRUNCATE_ONLYオプションを使用できましたが、2008以降のデータベースでは使用できなくなりました。 ログファイルを切り捨てるスクリプトがあります。 USE [MyDatabase] GO ALTER DATABASE [MyDatabase] SET RECOVERY SIMPLE WITH NO_WAIT DBCC shrinkfile('MyDatabase_log', 1) ALTER DATABASE [MyDatabase] SET RECOVERY FULL WITH NO_WAIT GO これはログファイルを完全に切り捨てますが、私の質問は次のとおりです。これはパフォーマンスに影響しますか? 私は毎日2回のフルバックアップを実行しているため、データのロールフォワードに関する限り、ログは実際には必要ありません。

4
SQL Server Expressのタスクスケジューラ
SQL Server 2008 R2 Expressエディションのデータベースで動作するASP.NET MVCアプリがあります。データベース内の一部のレコードを更新するには、定期的なタスクを実行する必要があります。 残念ながら、Express EditionにはSQLエージェントがありません。 どのアプローチをお勧めしますか?


4
想像できるようにT-SQLで変数を使用できないのはなぜですか?
許してください、私はSQLの世界に移行した開発者です。変数を追加することでSQLを改善できると思いましたが、期待どおりに機能しませんでした。誰かがこれがうまくいかない理由を教えてもらえますか?私は回避したくない、これがうまくいかない理由を知りたいのですが、正当な理由があると確信しているので、私はそれがうまくいくと思いますが、現在それは飛び出していません。 DECLARE @DatabaseName varchar(150) SET @DatabaseName = 'MyAmazingDatabaseName' CREATE DATABASE @DatabaseName GO USE @DatabaseName GO

7
毎日のスケジュールを[開始日]にグループ化します。終了日]曜日のリストとの間隔
2つのシステム間でデータを変換する必要があります。 最初のシステムは、スケジュールを日付の単純なリストとして保存します。スケジュールに含まれる各日付は1行です。日付のシーケンスにはさまざまなギャップが存在する可能性があります(週末、祝日、長い一時停止、曜日によってはスケジュールから除外される場合があります)。週末も含めて、隙間はまったくありません。スケジュールは最大2年です。通常は数週間です。 次に、週末を除く2週間にわたるスケジュールの簡単な例を示します(以下のスクリプトにはさらに複雑な例があります)。 +----+------------+------------+---------+--------+ | ID | ContractID | dt | dowChar | dowInt | +----+------------+------------+---------+--------+ | 10 | 1 | 2016-05-02 | Mon | 2 | | 11 | 1 | 2016-05-03 | Tue | 3 | | 12 | 1 | 2016-05-04 | Wed | 4 | | …


2
SQL 2005 [SQL_Latin1_General_CP1_CI_AS]から2008への移行-「後方互換性」を使用して機能を失う
SQL 2005 [インスタンスとDBの照合順序SQL_Latin1_General_CP1_CI_AS]からSQL 2008 [デフォルトは]に移行していますLatin1_General_CI_AS。 SQL 2008 R2のインストールを完了し、デフォルトのLatin1_General_CI_AS照合を使用しましたが、データベースの復元はまだSQL_Latin1_General_CP1_CI_ASです。例外的な問題が発生しました- Latin1_General_CI_ASデータベースが存在していた ときの#tempテーブル SQL_Latin1_General_CP1_CI_ASと、これが現在の場所です-落とし穴についてのアドバイスが必要です。 SQL 2008 R2のインストールでは'SQL Collation, used for backwards compatibility'、2005データベースと同じ照合を選択するオプションがある場所で使用するインストールオプションがありますSQL_Latin1_General_CP1_CI_AS。 これにより、#tempテーブルで問題が発生することはなくなりますが、落とし穴はありますか? SQL 2008の「現在の」照合を使用しないことにより、あらゆる種類の機能または機能が失われますか? 2008年からSQL 2012に移行したとき(2年以内など)はどうですか?問題はありますか? ある時点で行くことを余儀なくされLatin1_General_CI_ASますか? 一部のDBAのスクリプトが完全なデータベースの行を完了し、新しい照合を使用してデータベースに挿入スクリプトを実行することを読みました。

4
* Tables *をテーブル値パラメーターとして使用(TVP)
MS SQL 2008はTVPをサポートしています。TVPは、保存された処理手順にデータを一括アップロードするための便利な機能です。 ユーザー定義型を作成するのではなく、既存のテーブル定義を活用できますか?たとえば、次の署名を使用してストアドプロシージャを作成することはできますか? CREATE PROCEDURE usp_InsertProductionLocation @TVP **LocationTable** READONLY ドキュメントは、これが不可能であることを示唆しているようです。 サンプルコード /* Sample code from: http://msdn.microsoft.com/en-us/library/bb510489.aspx */ USE AdventureWorks2008R2; GO /* Create a table type. */ CREATE TYPE LocationTableType AS TABLE ( LocationName VARCHAR(50) , CostRate INT ); GO /* Create a procedure to receive data for the table-valued …

1
データベースのエイリアスまたはシノニムを作成することはできますか?
データベースのエイリアスまたはシノニムを作成することはできますか?私ができることを望んでいるのは、NewDatabaseNameをOldDatabaseNameとしてエイリアス化して、大量のコードを書き直さなくて済むようにすることです。 バックストーリー:私はばかげた自己誘発問題を抱えたクライアントからアプローチされました。SQL Serverバックエンドを備えたサードパーティアプリケーションがあります。ユーザーは、Visual Basicを使用してこのデータベースに対してカスタムレポートを作成し、すべてのデータベース接続情報をプログラムにハードコーディングしています。 最近、サードパーティのソフトウェアはデータベースの名前を変更しました。これで、すべてのレポートEXEが失敗しています。 ああ、彼らは多くのソースコードも持っていません。 私は笑いを抑えて、自分に何ができるか見てみようと言いました。

2
NEWSEQUENTIALID()を列のデフォルト値として使用できないのはなぜですか?
Management Studioでテーブルを作成しようとしていますが、新しい(SQL 2005以降の)NEWSEQUENTIALID()関数について読んだ後、試してみたいと思いました。 これは私がやっていることです: しかし、それは私をさせません。私が得るエラーメッセージは次のとおりです。 'FormTemplate (Forms)' table - Error validating the default for column 'FormTemplateId'. ここにトリックがありませんか?私は間違いなくSQL Server 2008 R2を実行しています。

3
ディメンションの範囲を動的に定義する
キューブを作成するたびに直面する問題があり、それを克服する方法をまだ見つけていません。 問題は、ディメンション内でハードコードすることなく、ユーザーがさまざまなものを自動的に定義できるようにする方法です。例で問題を説明します。 Customersというテーブルがあります: これはテーブル内のデータです。 ピボットスタイルでデータを表示し、以下のように定義された範囲で給与と年齢をグループ化します。 このスクリプトを作成し、範囲を定義しました。 SELECT [CustId] ,[CustName] ,[Age] ,[Salary] ,[SalaryRange] = case when cast(salary as float) <= 500 then '0 - 500' when cast(salary as float) between 501 and 1000 then '501 - 1000' when cast(salary as float) between 1001 and 2000 then '1001 - 2000' when cast(salary …

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