データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A

1
CREATE TYPEの後にSQL * PLUSにスラッシュが必要なのはなぜですか?
Typeを定義してTOADでテストしただけで問題はありませんでしたが、すべて問題ありませんでした。しかし、SQL * PLUSで実行するとエラーがスローされました。 例: CREATE OR REPLACE TYPE MyType AS OBJECT ( Item1 NUMBER, Item2 NUMBER ); 何らかの理由でここにスラッシュを追加する必要があります CREATE OR REPLACE TYPE MyType AS OBJECT ( Item1 NUMBER, Item2 NUMBER ); / 私にとっては、スラッシュを必要としないCreate Tableステートメントに似ています。かなり分かりにくいと思います。私はそれがどのように機能するか知っていますが、この設計決定が下された理由を誰でも説明できますか?

5
MySQLの自己結合テーブルなしで複数の値に対して単一の列を一致させる
質問への回答を保存するために使用するテーブルがあります。特定の質問に対する特定の回答を持っているユーザーを見つけることができる必要があります。したがって、テーブルが次のデータで構成されている場合: user_id question_id answer_value Sally 1 Pooch Sally 2 Peach John 1 Pooch John 2 Duke そして、質問1で「Pooch」、質問2で「Peach」に答えるユーザーを見つけたいと思っています。次のSQLは(明らかに)動作しません。 select user_id from answers where question_id=1 and answer_value = 'Pooch' and question_id=2 and answer_value='Peach' 私が最初に考えたのは、探している答えごとにテーブルに参加することでした。 select a.user_id from answers a, answers b where a.user_id = b.user_id and a.question_id=1 and a.answer_value = 'Pooch' and …

3
SQL 2008でインスタンスを複製する最も効果的な方法は何ですか?
データベースに十分なデータがある便利なデータベースインスタンスがあり、それをデモ目的に使用できます。ラップトップにコピーを置いて、開発作業に使用できるようにします。私はオフィスにいません。(通常のdevデータベースインスタンスは約150GBで、この1つのインスタンスは3GBです) ラップトップでインスタンスを再作成するための最も反復可能/スクリプト可能な方法は何ですか?SqlServer2008のインストーラーを再度実行し、インスタンスを設定する必要があると確信していますが、その後...毎月かそこらで古いデータベースを削除できるようにしたいと考えていますインスタンスが1つのデモシステムでもラップトップでも変更されないため、すべての新しいものをラップトップにコピーします。ただし、データベース自体は更新され、sprocなどが更新されます。 すべての「データベースファイルのドロップ;データベースファイルの追加{パス}」をスクリプト化し、それらを何らかの実行可能なバッチファイルに保存することを検討しました。その後、「ドロップ、削除、コピー、追加」 xcopyとbatchよりも良い方法でしたか? 私は安価でこれをやろうとしているので(私たちは常に安いものでしようとしないでください)、RedGate製品などに特に興味はありません。自分用にテキストエディタで簡単に保守できるものが欲しい。

3
テーブル内のフィールドが符号付きまたは符号なしの最大32ビット整数に近づいたらどうしますか?
一意の自動インクリメントフィールドの形式でユーザーレコードを保持する任意のデータベース(たとえば、ユーザー間メッセージ)...現在のデータ型の?(32ビットINT)?次のエントリに(2∧32)-1の番号を割り当てようとすると、データベースサーバーがオーバーフローするのではないかと推測しています。レコードを追加し続けますか?あなたならどうしますか? たとえば、VARCHARSではなくINTを使用するのはなぜですか? この架空の質問を自問してから数日が経ちましたが、専門家が何をするのか知りたいです。
14 mysql 

5
この2000万件のレコードビューをより速くクエリするにはどうすればよいですか?
検索機能では、検索する必要があるすべてのテーブルのレコードを含むビューを使用しています。ビューには、ほぼ2000万件のレコードがあります。このビューに対する検索には時間がかかりすぎています。 このビューのパフォーマンスを改善するためにどこを調べるべきですか? ビューの大まかな定義は次のとおりです。13のテーブルと約30のフィールドが含まれます。 CREATE VIEW [dbo].[v_AllForSearch] AS SELECT FT.firstField AS [firstField] , FT.fld_primary AS [fld_primary] , FT.fld_thirdField AS [thirdField] , FT.fld_fourthField AS [fourthField] , ISNULL(ST.[fld_firstSearchField],'') AS [firstSearchField] , ISNULL(TT.[fld_thirdSearch],'') AS thirdSearch , ISNULL(TT.[fld_fourthSearch],'')AS fourthSearch , ISNULL(TT.[fld_fifthSearch],'')AS fifthSearch , ISNULL(FRT.[fld_sixthSearch],'') As [sixthSearch] , ISNULL(FRT.[fld_seventhSearch],'') AS [seventhSearch] , ISNULL(FRT.[fld_eightSearch],'')AS [eightSearch] , ISNULL(FIT.[fld_nineSearch],'') …

3
SQL Server-一時テーブルと物理テーブル
私の職場では、#tempテーブルの使用をやめて、代わりにSPIDを含む永続的な物理テーブルを使用する動きが進行中です。以前に#tempテーブルにINSERTしたことがある場合は常に、たとえばストアドプロシージャの先頭にある一連INSERT INTO dbo.MyPermanentTable (SPID, ...) VALUES (@@SPID, ...)のDELETE FROM dbo.MyPermanentTable WHERE SPID = @@SPIDステートメントと共に、が必要になります。さらに、言うまでもなく、これらの「一時データを保存するための永続テーブル」が使用される場所では、を含めるように注意する必要がありますWHERE SPID = @@SPID。 このプラクティスへの移行の背後にあるロジックは、クエリが実行されているサーバーの全体的なパフォーマンスを向上させることです(tempdbのI / Oと競合を減らすことにより)。私はいくつかの理由でこのアプローチに熱心ではありません-く、潜在的に危険であり、新しいスキームを使用するクエリのパフォーマンスを損なう可能性があるようです。 #tempテーブルを削除するためのこれまたは類似のアプローチの経験はありますか?

5
アタッチ/デタッチ対バックアップ/復元
データベースを(全体として)別のサーバーに転送して、別のテスト環境をセットアップするために複製データベースを作成する必要があります。 次の2つの選択肢があります。 ソースサーバーで完全バックアップを作成/ターゲットサーバーで復元。 移行元サーバーで切断/移行先サーバーで接続。 要件に応じた2つのソリューションの長所と短所は何ですか? SQL Server 2008 Enterpriseを使用しています。

4
RAID1または5の代わりにRAID0これはおかしいですか?
SQL Serverクラスターの1つにRAID0セットアップを使用することを検討しています。私は状況の概要を説明し、これが悪い考えである理由を探しています。また、ユースケース、ホワイトペーパー、または他のドキュメントを持っている人がこのトピックについて私に指摘できるなら、それは素晴らしいことです。 SQLクラスターの一部である2つのデータセンターに3つのサーバーがあります。それらはすべて、可用性グループでSQL Serverを実行しています。プライマリには、すぐ隣にレプリカがあり、もう1つは他のデータセンターにあります。自動フェールオーバーを使用して同期レプリケーションを実行しています。すべてのドライブはエンタープライズクラスのSSDです。SQL Server 2017または2019を実行します。 RAID0アレイで他の方法よりもRAID0アレイ上で実行することには、実際の欠点があったとしてもわずかしかありませんが、複数の利点があると考えています。私が現在見ている唯一のマイナスは、プライマリサーバーの冗長性の欠如です。長所として: 誰かが手動で操作を行うという通知を受け取るまで、速度が低下した状態で実行されるのではなく、ドライブに障害が発生した場合、サーバーはすぐに二次側に障害を起こし、完全な動作能力を維持します。これには、フェールオーバーを通知するという追加の利点があるため、原因をより早く調査できます。 TB容量ごとの全体的な障害の可能性を減らします。パリティドライブまたはミラードライブは必要ないため、アレイあたりのドライブ数を減らします。ドライブが少ないほど、ドライブが故障する可能性が低くなります。 もっと安い。必要な容量に必要なドライブの数が少ないことは明らかにコストがかかりません。 これは従来のビジネス思考ではないことは知っていますが、検討していないことはありますか?私は、賛否両論の入力を歓迎します。 クエリのパフォーマンスを向上させるためにこれをしようとはしていませんが、意味のあるものがあれば、気軽に指摘してください。私の主な関心事は、私が考えていなかった信頼性または冗長性の問題を考慮または対処できないことです。 OSは別のミラードライブ上にあるため、サーバー自体は動作し続ける必要があります。これらのドライブの1つを交換して、再びミラー化できます。それは小さく、システムDB以外のデータベースファイルはありません。数分以上かかるとは想像できません。データアレイの1つに障害が発生した場合、ドライブを交換し、アレイを再構築して、AGと復元および再同期します。私の経験では、復元はRAID5ドライブの再構築よりもはるかに高速です。RAID1で障害が発生したことは一度もないので、その再構築が高速になるかどうかはわかりません。リストアはバックアップから行われ、プライマリと一致するようにロールフォワードされるため、プライマリサーバーの負荷の増加は、回復したレプリカと最後の数分間のログのみを同期する必要があります。

1
ヒストグラム外のカーディナリティー推定
セットアップ カーディナリティの推定値を理解するのに苦労しています。テストのセットアップは次のとおりです。 Stack Overflowデータベースの2010バージョン SQL Server 2017 CU15 + GDR(KB4505225)-14.0.3192.2 新しいCE(互換性レベル140) 私はこのプロシージャを持っています: USE StackOverflow2010; GO CREATE OR ALTER PROCEDURE #sp_PostsByCommentCount @CommentCount int AS BEGIN SELECT * FROM dbo.Posts p WHERE p.CommentCount = @CommentCount OPTION (RECOMPILE); END; GO dbo.Postsテーブルに非クラスター化インデックスまたは統計がありません(にクラスター化インデックスがありますId)。 このための推定プランを要求すると、「推定行」dbo.Postsは1,934.99になります。 EXEC #sp_PostsByCommentCount @CommentCount = 51; 次の統計オブジェクトは、推定プランを要求したときに自動的に作成されました。 DBCC SHOW_STATISTICS('dbo.Posts', [_WA_Sys_00000006_0519C6AF]); そのハイライトは次のとおりです。 統計のサンプルレートは1.81%と非常に低い(67,796 …

1
読み取り可能なセカンダリの強制計画
可用性グループのプライマリでプランが強制される場合、セカンダリで実行されるクエリに適用されますか? 私は計画強制の両方の可能性をカバーする答えを探しています: 計画ガイド クエリストアの強制計画 QS強制プランは引き継がれないことを示唆する次の記事を読みましたが、ドキュメント内で信頼できるもの、またはプランガイドに関するものを見つけることができません。 Erin Stellatoによるクエリストアと可用性グループ Vikas RanaによるAlwaysOn Readable Secondaryでのクエリデータストアの強制プランの動作 強制の決定的な証拠は存在だろうUse Planか、PlanGuideNameとPlanGuideDBの二次実行計画のプロパティ。

1
一意でないインデックスに重複したキー行を挿入できませんか?
8週間エラーがなかった後、過去数日間でこの奇妙なエラーに3回遭遇しましたが、困惑しています。 これはエラーメッセージです。 Executing the query "EXEC dbo.MergeTransactions" failed with the following error: "Cannot insert duplicate key row in object 'sales.Transactions' with unique index 'NCI_Transactions_ClientID_TransactionDate'. The duplicate key value is (1001, 2018-12-14 19:16:29.00, 304050920).". インデックスは一意ではありません。気付いた場合、エラーメッセージ内の重複キー値はインデックスと一致していません。奇妙なことは、プロシージャを再実行すると成功することです。 これは私の問題がある最新のリンクですが、解決策が見つかりません。 https://www.sqlservercentral.com/forums/topic/error-cannot-insert-duplicate-key-row-in-a-non-unique-index 私のシナリオに関するいくつかのこと: procはTransactionID(主キーの一部)を更新しています-これがエラーの原因であると思いますが、理由はわかりませんか?そのロジックを削除します。 テーブルで変更追跡が有効になっています コミットされていないトランザクションの読み取りを行う 各テーブルには45のフィールドがあり、主にインデックスで使用されるものをリストしました。update文のTransactionID(クラスター化キー)を(不必要に)更新しています。奇妙なことに、先週まで何ヶ月も問題がなかった。そして、それはSSISを介して散発的にのみ発生します。 テーブル USE [DB] GO /****** Object: Table [sales].[Transactions] Script …

2
SQL Serverは、システムで生成された制約名に競合を作成できますか?
SQL Server 2008データベース(非クラスター化)に数百万のテーブルを作成するアプリケーションがあります。SQL Server 2014(クラスター化)にアップグレードしようとしていますが、負荷がかかっているときにエラーメッセージが表示されます。 「データベースに「PK__tablenameprefix__179E2ED8F259C33B」という名前のオブジェクトが既に存在します」 これは、システムで生成された制約名です。ランダムに生成された64ビットの数字のように見えます。多数のテーブルが原因で衝突が発生している可能性はありますか?テーブルが1億個あると仮定すると、次のテーブルを追加するときに衝突が発生する可能性は1兆分の1未満ですが、それは均一な分布を前提としています。衝突の可能性を高めるために、SQL Serverがバージョン2008と2014の間で名前生成アルゴリズムを変更した可能性はありますか? もう1つの重要な違いは、2014年のインスタンスがクラスター化されたペアであることですが、上記のエラーが発生する理由の仮説を立てるのに苦労しています。 PSはい、何百万ものテーブルを作成するのは非常識です。これは、私が制御できないブラックボックスのサードパーティコードです。狂気にもかかわらず、バージョン2008では機能しましたが、現在はバージョン2014では機能しません。 編集:詳細な検査では、生成されたサフィックスは常に179E2ED8で始まるようです-つまり、ランダムな部分は実際には32ビットの数字であり、衝突の確率は新しいテーブルが追加されるたびに50分の1です私が見ているエラー率にはるかに近い一致です!

1
pg_stat_activityの行のIDLE状態は何を示していますか?
誰かが私pg_stat_activityのpostgres 9.5に関して下の疑問を解決できますか? state IDLEの行に何が示されているのか教えてもらえますかpg_stat_activity?postgresへの開いている接続をすべてチェックし、接続がIDLEクエリを実行していない場合、接続によって実行された最後のクエリを示しているようですか? 出力ではselect * from pg_stat_activity私は行を見ていますstate IDLEし、query_start_date2日以上古いですか?これは何を意味しますか?これを心配する必要がありますか? pg_stat_activityがどのように読み込まれるかを誰かに教えてもらえますか?Select * from pg_stat_activitypostgresによって維持されているスナップショットから詳細を生成するようなクエリを実行している場合、またはpostgresで開いている現在の接続をチェックして詳細を提供しますか?
14 postgresql 

2
SQL Server 2016の奇妙なパフォーマンス問題
VMware仮想マシンで実行されているSQL Server 2016 SP1の単一インスタンスがあります。異なるアプリケーション用の4つのデータベースが含まれています。これらのアプリケーションはすべて別々の仮想サーバー上にあります。それらのどれもまだ実稼働で使用されていません。ただし、アプリケーションをテストする人々はパフォーマンスの問題を報告しています。 これらはサーバーの統計です: 128 GB RAM(SQL Serverの場合は110 GBの最大メモリ) 4コア@ 4.6 GHz 10 GBitネットワーク接続 すべてのストレージはSSDベースです プログラムファイル、ログファイル、データベースファイル、およびtempdbは、サーバーの別のパーティションにあります asd ユーザーは、C ++ベースのERPアプリケーションを介して単一画面アクセスを実行しています。 ostress多くの小さなクエリまたは大きなクエリを使用してMicrosoftでSQL Serverのストレステストを行うと、最大のパフォーマンスが得られます。彼が十分に速く答えることができないので、スロットリングすることだけがクライアントです。 しかし、ユーザーがほとんどいない場合、SQL Serverはほとんど何もしていません。それでも、アプリケーションに何かを保存するために、人々は永遠に待つ必要があります。 ポールランダルの「どこが痛いのか教えて」クエリによると、すべての待機イベントの50%はASYNC_NETWORK_IOです。 これは、ネットワークの問題、またはアプリケーションサーバーまたはクライアントのパフォーマンスの問題を意味する可能性があります。どちらも、最大容量でリソースをリモートで使用していません。ほとんどの場合、CPUはすべてのマシン(クライアント、appserver、dbサーバー)で約26%です。 ネットワーク接続の遅延は約1〜3ミリ秒です。dbサーバーのIOは、アプリケーションで通常の使用中に最大20MB / sの書き込み速度です(avgは7-9MB / sです)。ストレステストを行うと、最大で約5GB /秒になります。 バッファキャッシュサイズは、ERPシステムのDBで60GB、ファイナンスソフトウェアで20GB、品質保証ソフトウェアで1GB、ドキュメントアーカイブシステムで3GBです。 SQL ServerアカウントにInstant File Initializationを使用する権利を与えました。少しでもパフォーマンスは向上しませんでした。 通常の使用中のページの平均寿命は約15k +です。予想される重いストレステストの終了中に約.05kに低下します。バッチ/秒は、ワークロードに応じて約2〜8kです。 私はERPアプリはひどく書かれていると思いますが、すべてのアプリケーションが影響を受けるのでできません。最小限の作業負荷でも。 しかし、私はこれを引き起こしているものを特定することはできません。ヒント、ヒントチュートリアル、アプリケーション、ベスト/ワーストプラクティスドキュメント、またはこの問題に関して皆さんが心に留めておくものはありますか? これらはからの結果ですsp_BlitzFirst: 600秒実行しました。アプリの負荷が高いときに開始しました。1/3の時間ASYNC_NETWORK_IOです。また、私はとのネットワーク接続をテストしNTttcp、PsPing、ipferf3、とpathping。珍しいことはありません。応答時間は最大3ms、平均0.3msです。スループットは約1000 MB / sです。 私の調査の結果、常にASYNC_NETWORK_IO一番のウェイトスタットになりました。 Large-Receive-OffloadVMware の機能を無効にした結果を調査しました。まだテスト中ですが、結果には一貫性がないようです。最初の 'ベンチマーク'の結果は19分間でした(一番上の結果は、アプリがSQL …

1
拡張イベントに許可されるバインド済みアクションの最大数はいくつですか?
イベントセッションのイベントに「多すぎる」アクションを追加すると、次のエラーが表示されます。 メッセージ25639、レベル16、状態23、行1イベント "[イベント名]"は、許可されたバインドアクションの数を超えています。 許可されるアクションの数 イベントによって異なりますか? 実験に基づく答えは、27のようですsqlserver.rpc_completed。しかし、Microsoftのドキュメントにはその番号がありません。また、イベントごとに異なるようですsqlserver.sql_batch_completed。 失敗するコード例: CREATE EVENT SESSION [Test] ON SERVER ADD EVENT sqlserver.rpc_completed( ACTION( package0.callstack, package0.collect_cpu_cycle_time, package0.collect_current_thread_id, package0.collect_system_time, package0.event_sequence, package0.last_error, package0.process_id, sqlos.cpu_id, sqlos.numa_node_id, sqlos.scheduler_address, sqlos.scheduler_id, sqlos.system_thread_id, sqlos.task_address, sqlos.task_elapsed_quantum, sqlos.task_resource_group_id, sqlos.task_resource_pool_id, sqlos.task_time, sqlos.worker_address, sqlserver.client_app_name, sqlserver.client_connection_id, sqlserver.client_hostname, sqlserver.client_pid, sqlserver.context_info, sqlserver.database_id, sqlserver.database_name, sqlserver.is_system, sqlserver.nt_username, sqlserver.plan_handle)) GO DROP EVENT SESSION [Test] …

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