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

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

1
SQL Serverでのvarcharのサイジングに関する現在のベストプラクティスは何ですか?
ストレージとパフォーマンスの両方の観点から、varchar列の大きさを決定する最良の方法を理解しようとしています。 パフォーマンス 私の研究から、それはそうですvarchar(max)は、本当に必要な場合にのみ使用してください。つまり、列が8000文字以上を収容する必要がある場合、1つの理由はインデックス作成の欠如です(ただし、一般にvarcharフィールドでのインデックス作成には少し疑いがあります。ただし、DBの原則はかなり新しいので、それが根拠がないかもしれません。 )および圧縮(より多くのストレージの問題)。実際、クエリは可能な最大サイズを考慮しなければならないため、一般的に人々はvarchar(n).... oversizingを行うときに必要なものだけを使用することを推奨しているようです。しかし、エンジンはデータの実際の平均サイズの推定値として、示されたサイズの半分を使用することも述べられています。これは、データから平均サイズを決定し、それを2倍にし、それをnとして使用する必要があることを意味します。ただし、変動性が非常に低いがゼロではないデータの場合、これは、最大サイズの最大2倍のサイズ変更を意味します。洞察をいただければ幸いです。 ストレージ 実際のストレージは実際のデータに制限されていることを念頭に置いて、行内ストレージと行外ストレージのしくみについて読んだ後、nの選択はストレージにほとんどまたはまったく影響がないように思えます(それがすべてを保持するのに十分な大きさであることを確認してください)。varchar(max)を使用しても、ストレージに影響はありません。代わりに、可能であれば、各データ行の実際のサイズを〜8000バイトに制限することが目標になる場合があります。それは物事を正確に読んでいますか? コンテキスト 一部の顧客データは少し変動するため、通常、必要な列よりも少し幅を広く(たとえば15〜20%大きく)します。他に特別な考慮事項があるかどうか疑問に思っていました。たとえば、一緒に仕事をしている人から、2 ^ n-1サイズを使用するように言われました(ただし、それを証明するものは見つかりませんでした。 最初のテーブル作成について話している。新しいテーブルの送信を開始し、サンプルデータ(または最初の本番データセットのみ)を送信することをお客様から言われます。これを見て、データを保持するためのテーブルを作成します。将来のインポートとサンプルの内容を処理できるように、テーブルを作成します。ただし、特定の行は長くなるようにバインドされているため、それらをパディングします。 問題はどれくらいか、そして技術的なガイドラインはありますか?

3
テーブルの作成中にデフォルトの制約を追加するにはどうすればよいですか?SQL Server [終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 3年前休業。 以下に示すように、列の後に制約が続く新しいテーブルを作成しようとしています。 Create tblTest( columns.. .. .. Gender int, Constraint DF_tblTest_Gender Default 3 For Gender, .. .. .. ) ただし、デフォルトの制約に近いエラーメッセージが表示されます。 「for」の近くに不正な構文

4
ジョブ、スケジュール、および次のスケジュールされた実行日時のリスト
ジョブ、スケジュール、および次のスケジュールされた実行日時のリスト ジョブ、スケジュール、次のスケジュールされた実行日時を一覧表示しようとしています。しかし、私は成功しているようには見えません。 sysjobactivity next_scheduled_run_dateがありますが、これは必要ですが、ジョブとスケジュールの両方に接続することはできません。 以外の方法がある場合は、そこにsysjobactivity案内してください。 SELECT sj.name AS jobName , ss.name AS scheduleName , sja.next_scheduled_run_date FROM msdb.dbo.sysjobs sj INNER JOIN msdb.dbo.sysjobactivity sja ON sja.job_id = sj.job_id INNER JOIN msdb.dbo.sysjobschedules sjs ON sjs.job_id = sja.job_id INNER JOIN msdb.dbo.sysschedules ss ON ss.schedule_id = sjs.schedule_id WHERE (sj.name LIKE 'xray%') AND (sja.next_scheduled_run_date > GETDATE())

3
小数点記号としてコンマを使用した文字列数値をNUMERIC(10、2)に変換します
私はギリシャ語でフォーマットされた数値を含むvarchar列のSQLテーブルを持っています(千の区切り文字として。そして小数点の区切り文字としてコンマ) 古典的な変換 CONVERT(numeric(10,2),REPLACE([value],',','.')) ので機能しません。(千区切り)変換を強制終了します たとえば試してください CONVERT(numeric(10,2),REPLACE('7.000,45',',','.')) そのような値をnumeric(10,2)に変換したい それを処理する方法の提案はありますか?

1
SQL Serverエラー「ファミリーシーケンス番号2がありません」
サーバーにローカルデータベースを復元しようとしていますが、バックアップに問題があります。ファイル.bakを実行しましたが、サーバーにロードしようとするたびに許可されません。 ここに私が受け取るエラーメッセージのスクリーンショットがあります: 私はRESTORE LABELONLY自分のファイルを復元するために使用できるが、それでも機能しないことを読んだのですが、実行するたびに次のようなものが表示されます: バックアップデバイス 'C:\ Program Files \ Microsoft SQL Server \ MSSQL10_50.JOSEMA \ MSSQL \ Backu \ INNOVA-T.bak'を開けません。オペレーティングシステムエラー3(このエラーのテキストを取得できませんでした。理由:15105)。メッセージ3013、レベル16、状態1、行1 RESTORE LABELONLYが異常終了しています。 どんな助けでも素晴らしいでしょう。ありがとうございました。

1
複製されるLOBデータの長さ(2135980)が構成済みの最大値65536を超えています
レプリケーションエラー「レプリケートされるLOBデータの長さ(2135980)が構成済みの最大65536を超えています」が発生します。 sp_configureは以前に適用されて最大値(-1)に設定され、sys.configurationsに対するクエリは最大値(-1)が使用中であることを確認しました。 EXEC sp_configure 'max text repl size', -1 ; RECONFIGURE; GO select * from sys.configurations where name like 'max text repl size%'; GO 最大値ではなく「最大テキストreplサイズ」に大きな値を使用して、無効にしてからもう一度オンにしてみましたが、役に立ちませんでした。 「テキストの最大replサイズ」の設定や他のどこかを上書きできるものはありますか?

2
io_stall_writes_msがtempdbでこれほど高いのはなぜですか?
ユーザーとシステムのデータファイルは同じディスクドライブにあります。(io_stall_write_ms /(1.0 + num_of_writes))は、ユーザーファイルでは2未満ですが、tempdbファイルは通常400を超えています。いくつかのサーバーでは、tempdbに書き込むのに時間がかかる理由があるので興味があります通常のデータベースデータファイルよりも。 SELECT DISTINCT UPPER(LEFT(mf.physical_name, 1)) AS Directory, ( io_stall_write_ms / ( 1.0 + num_of_writes ) ) as result, io_stall_write_ms, num_of_writes, fs.database_id, fs.[file_id] FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS fs INNER JOIN sys.master_files AS mf ON fs.database_id = mf.database_id AND fs.[file_id] = mf.[file_id] ありがとうございました、

1
Transact-SQLの集計関数の後に等号(=)を配置できますか?
私はこのようなスクリプトに遭遇しました: set @sum = sum = (case when somecol1 is null then DATEDIFF(d,[somecol2],somecol3) else 0 end) 2番目のキーワードの合計の後の等号(=)の意味が理解できません。クエリを実行すると、等号がある場合とない場合の両方でエラーが表示されません。 キーワードの後に​​等号を付ける目的を知りたいsum。それは間違いですか? ありがとう

4
ネットワークバックアップの代替
私たちの環境では、Always On可用性グループにあるサーバーとスタンドアロンのサーバーがあります。 通常はネットワーク共有にバックアップしますが、最近、データベースが大きくなるにつれて、かかる時間が長くなり、ネットワーク全体の速度が低下することがわかりました。 Ola hallengrenのスクリプトは、圧縮とバックアップファイルの分割に使用されています。私は毎日の「完全」バックアップのみを実行しています。バックアップは、ネットワーク共有EMC isilonドライブに送られます。 EMC DD Boostには満足できません。唯一の代替策は、ローカルバックアップを実行してから、同じネットワーク共有にコピーすることです。 上記以外の効率的な方法はありますか?

1
ALTER TABLE…DROP COLUMNは本当にメタデータのみの操作ですか?
ALTER TABLE ... DROP COLUMNはメタデータのみの操作であることを示すソースがいくつか見つかりました。 ソース どうすればいいの?DROP COLUMN中のデータは、基になる非クラスター化インデックスおよびクラスター化インデックス/ヒープから削除する必要はありませんか? さらに、Microsoft Docsは、それが完全にログに記録された操作であることを示唆しているのはなぜですか? テーブルに加えられた変更はログに記録され、完全に回復可能です。列の削除や、SQL Serverの一部のエディションでは、デフォルト値でNOT NULL列を追加するなど、大きなテーブルのすべての行に影響を与える変更は、完了して多くのログレコードを生成するのに長い時間がかかる場合があります。これらのALTER TABLEステートメントは、多くの行に影響するINSERT、UPDATE、またはDELETEステートメントと同じように注意して実行してください。 副次的な質問として:データが基になるページから削除されない場合、エンジンはどのようにドロップされた列を追跡しますか?

1
SQLの「言葉にできない言葉」とは何ですか?
SQLにとって「意味のない単語」とは何ですか? 私はsys.query_store_query_text(Transact-SQL)を読んでいて、次のように表示されるので、{SQL "unmentionable" word}をググる has_restricted_text ビット クエリテキストには、パスワードまたはその他の覚えのない単語が含まれています。 その他の3つのリンクで、見つけた場所に戻ることができますが、パスワードとの関係やSQLが気にするものを示すものは何も見つかりません。

1
組織ですべてのSQL Serverライセンスを「自己監査」する方法は?
だから私は素敵な非営利組織で新しい仕事を始めました。それは数十年前から存在しています。SQL Serverのさまざまなエディションとバージョン(例:2005 Expressから2016 SP2 Enterprise)と、多数のWindows VM(2003から2016までのバージョン)があります。 以前のDBAは、会社が所有しているライセンスの数や、エディション、バージョンに関するドキュメントを作成していませんでした。事実上、有用な記録はありません。 MAP Toolkitを実行してSQL Serverの詳細を収集しました。したがって、少なくとも、どのサーバーが存在するかについての開始点があり、どのサーバーがまだ運用データを提供しているかを調べました。 また、新しいApexSQL Discoverツールを使用しましたが、結果はまちまちです(申し訳ありませんが、サーバーを1台追加する必要があるときに、このツールが実行されるまで3日間待つことができません)。また、dbatools find-dbainstance(PSを使用して大量のデータをエクスポートする大ファンではありません)。これをすべてまとめることで、この時点で、このドメインに存在していたインスタンスのほとんどまたはすべてを発見したことをかなり確信しています。 もちろん、私はしましライセンスを照会して、いくつかの方法、徹底的に調査し、完全に役に立たない 、非常に便利MS SQLのライセンスガイド は何も組織が所有しているか、どのようにそれを取得することをライセンス上の任意の情報を提供していないようにみえているのを。 問題の核心:これらのライセンスの一部は10年(または2年)前に購入されました。一部は確かに紙の請求書でした。これは非営利団体だと言ったことを覚えていますか?プラス面として、ライセンスは安価です。一方、ライセンスは安価であり、新しいライセンスを購入する方が安いため、ほとんどまたはすべてのライセンスにSAはありません。編集:これは当時SAを購入しない理由でした、私は関与していませんでした。 ほとんどの場合SAがないため、サーバーには適切なライセンスが付与される可能性が高く、必要に応じて新しいものを購入するだけだと思いますか?それは恐ろしいアプローチのようです。 私の質問: 2004年の紙の請求書を調べようとせずに、新しい会社が所有しているSQL Serverライセンスをどのようにして知るのですか?私はこのような状況に行ったことがありません。監査を受けるか、パートナーに監査を依頼する唯一の選択肢ですか?(もしそうなら、マイクロソフトはあなたは何をしていますか??) dba.seがここで提供できる洞察は、おそらく私の人生に数年を追加します。皆さんありがとう!


1
ビューから*を選択すると4分かかります
ビューに対してクエリを実行すると4分以上かかるという問題が発生しています。しかし、クエリの根本を実行すると、1秒程度で終了します。 唯一わからないのは、結合されるテーブルが両方ともテンポラルテーブルであることです。 アドホッククエリプラン:https : //www.brentozar.com/pastetheplan/?id=BykohB2p4 クエリプランを表示:https : //www.brentozar.com/pastetheplan/?id=SkIfTHh6E どこで試してこれを理解するかについての提案はありますか? コードを表示: ALTER VIEW [dbo].[vwDealHistoryPITA] AS SELECT ROW_NUMBER() OVER (PARTITION BY cm.CodeMasterID ORDER BY cm.CodeMasterID, cm.LastUpdateDate) AS Deal_HistoryID, cm.CodeMasterID, cm.ProjectName, cm.[Status], d.CompanyID, d.DealTypeMasterID, cm.[Description], d.PassiveInd, d.ApproxTPGOwnership, d.NumberBoardSeats, d.FollowonInvestmentInd, d.SocialImpactInd, d.EquityInd, d.DebtInd, d.RealEstateInd, d.TargetPctgReturn, d.ApproxTotalDealSize, cm.CurrencyCode, d.ConflictCheck, cm.CreatedDate, cm.CreatedBy, cm.LastUpdateDate, cm.LastUpdateBy, d.ExpensesExceedThresholdDate, d.CurrentTPGCheckSize, …
11 sql-server 

2
DELETEクエリが別のフォーマットよりもはるかに長いフォーマットで実行されるのはなぜですか?
一部の重複を削除しようとする特定のクリーンアップコードがあります。 これは多くの顧客サイトで完全に実行されます。ログから、このクエリでは少なくとも1秒から45秒が消費されていることがわかります。 DELETE FROM [tbl] WHERE [Id] NOT IN ( SELECT MIN([Id]) FROM [tbl] GROUP BY [IdProject], [IdRepresentative], [TimeStart] ) しかし、私はこのクエリを4時間以上(現在までで、終了しない)実行している顧客がいます!私はDBをチェックしました(DBCC CHECKDB)、統計情報を更新しました(sp_updatestats)もUPDATE STATISTICS [tbl] WITH FULLSCAN変更を示していません。 お客様からDBの元のバックアップがあります。SQL Server 14.0.2002.14で実行しています。Standard Editionを持っていますが、お客様はExpress Editionを使用しています。 他の誰もDBを使用していないことをアクティビティモニターで確認できます。待機時間はなく、CPUは25%使用されています(4つのCPUのうちの1つのみ)。また、この私のテストケースでは、他の誰もDBを使用していません。 私はクエリを再構成し、このステートメントをチェックしました: DELETE FROM [tbl] FROM [tbl] AS t LEFT OUTER JOIN ( SELECT MIN([Id]) AS [IdMin] FROM [tbl] …

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