データベース管理者

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

2
サブクエリからの行のカウント
シンプル:サブクエリの行数をカウントしたいと思います。ステータスは、ホストがオンラインかどうかに注意してください。 悪いコード SELECT COUNT(ip_address) FROM `ports` ( SELECT DISTINCT ip_address FROM `ports` WHERE status IS TRUE ) 説明しました 最初のクエリを単独で実行すると、次のように返されます。 SELECT DISTINCT ip_address FROM `ports` WHERE status IS TRUE ip_address 192.168.1.1 192.168.1.2 192.168.1.248 192.168.1.251 192.168.1.254 単独で実行される2番目のクエリはこれを返します。 SELECT COUNT(ip_address) FROM `ports` 17 質問 5つのIPアドレスのリストを数える方法を教えてください。 私はこの単純な問題の可能な解決策をオンラインで見ていて、ただイライラしているので、専門家に尋ねると思いました。

4
SSISDBカタログを作成できません
SQL Server 2014統合サービスでカタログを作成しようとすると、以下のエラーが発生します。インストールや他の場所で私が見逃したものはありますか? カタログバックアップファイル 'C:\ Program Files \ Microsoft SQL Server \ 120 \ DTS \ Binn \ SSISDBBackup.bak'にアクセスできませんでした。データベースファイルが存在し、SQL Serverサービスアカウントがそれにアクセスできることを確認してください(Microsoft.SqlServer.IntegrationServices.Common.ObjectModel)


1
PostgreSQLの複数の主キー
次の表があります。 CREATE TABLE word( word CHARACTER VARYING NOT NULL, id BIGINT NOT NULL, repeat INTEGER NOT NULL ); ALTER TABLE public.word OWNER TO postgres; ALTER TABLE ONLY word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id); 次のコマンドを使用して復元しようとすると: psql -U postgres -h localhost -d word -f word.sql それは私にこのエラーを与えます: テーブル「単語」の複数の主キーは許可されていません postgresで複数の主キーを使用するにはどうすればよいですか?

4
ストアドプロシージャで動的SQLを使用したくないのはなぜですか?
動的SQLを使用したくないと言った人がいました。具体的な例や実際の例を挙げていただけますか?個人的には、データベースに数回コーディングします。柔軟性があるので大丈夫だと思います。私の推測では、SQLインジェクションまたはパフォーマンスについてです。他に何か?

3
2つのプロセスが同時にマテリアライズドビューを同時にリフレッシュしようとするとどうなりますか?
ドキュメントによると: マテリアライズドビューの同時選択をロックアウトせずに、マテリアライズドビューを同時に更新します。(...) ...その他のコンテンツ... でも、このオプションを使用して一度に一つだけREFRESHは、任意のに対して実行可能 マテリアライズド・ビューは1。 私が持っていたそれをリフレッシュするマテリアライズド・ビューの最後のリフレッシュ時間を確認機能をして、60秒以上が経過した場合、それがでしょう。 しかし、2つの別々のプロセスから同時にマテリアライズドビューを更新しようとするとどうなりますか?彼らはキューに入れますか、それともエラーを上げますか? MATERIALIZED VIEWが更新されていることを検出して、触れないようにする方法はありますか? 現在、私は(設定リフレッシュする前に、テーブルのレコードを移入するために頼ってきたrefreshingしtrue)、その後にそれを設定するfalseプロセスが終了したとき。 EXECUTE 'INSERT INTO refresh_status (last_update, refreshing) VALUES (clock_timestamp(), true) RETURNING id') INTO refresh_id; EXECUTE 'REFRESH MATERIALIZED VIEW CONCURRENTLY my_mat_view'; EXECUTE 'UPDATE refresh_status SET refreshing=false WHERE id=$1' USING refresh_id; その後、このプロシージャを呼び出すたびに、最新の値last_updateとそのrefreshing値を確認します。refreshingtrueの場合、マテリアライズドビューを更新しようとしないでください。 EXECUTE 'SELECT extract(epoch FROM now() - (last_update))::integer, refreshing FROM refresh_status ORDER …


6
オペレーティングシステムがエラー21を返しました(デバイスの準備ができていません。)
Windowsを再起動するたびに、一部のデータベースで次のエラーが発生します。 オペレーティングシステムがエラー21を返しました(デバイスの準備ができていません。) 私はディスクをチェックしましたchkdsk /r-不良セクターはありません。 DBCC CHECKDBエラーなしで実行しました: *(CHECKDB found 0 allocation errors and 0 consistency errors in database)* SQL Serverを再起動すると、エラーが消えます。 Windows 10およびSQL Server 2016 Express。

1
特定の列への依存関係の検索(sysdependsを使用しない現代的な方法)
特定のテーブルだけでなく、テーブル内の特定の列を使用するすべてのビューとストアドプロシージャを見つける必要があります。 次のように機能すると思われますが、この方法を使用する場合は注意が必要な警告が多数あります(さまざまな理由で信頼性が低く、すぐに非推奨になるなど)。 SELECT object_name(so.id) TableName, sc.name ColumnName, OBJECT_NAME(sd.id) DependentObjectName, (SELECT xtype FROM sysobjects so WHERE so.id = sd.id) Object_Type FROM sysobjects so INNER JOIN syscolumns sc ON so.id = sc.id INNER JOIN sysdepends sd ON so.id = sd.depid and sc.colid = sd.depnumber WHERE object_name(so.id) = 'MyTableName' AND sc.name = 'MyColumnName' …
13 sql-server 

6
非常に大きな主キーインデックスを再構築する
AzureでホストされているSQLデータベースがあります。問題は、サイズが制御不能になっていることです。主キーのクラスター化インデックスで最大99%の断片化が見られます。 他のすべてのインデックスをonline=onオプションで再構築できますが、パフォーマンスには影響しません。PKクラスター化インデックスの1つのサイズが200GBを超えているため、この1つでREBUILD...WITH (ONLINE=ON)はロックが発生します。 すべてのタイムゾーンのユーザーがサイトにアクセスしているため、オフラインでインデックスを再構築できる時間を見つけることができません。 サイトでダウンタイムを発生させずに大きなインデックスを再構築するための最良の戦略は何ですか? 断片化は99%なので、再編成しても効果がないと思います。問題は、オンラインでもテーブルがロックされることです。主な問題は、インデックスが200GBを超えることです。主キーは整数です。

1
PostgreSQLで(AUTO)VACUUMプロセスをキャンセルすると、すべての作業が無駄になりますか?
場合によっては、大量のを作成した後update、insertまたはdeleteテーブルからVACUUM FULL ANALYZE、DBが肥大化していないことを確認するためにを開始しました。本番データベースでこれを行うと、長期間テーブルをブロックすることができたため、これは良いアイデアではなかったことがわかりました。それで、私はプロセスをキャンセルしました、多分ちょうどVACUUM(完全ではない)試みたか、AUTOVACUUMそれができることは何でも後でやらせ​​ます。 問題は、VACUUMまたはAUTOVACUUMを「途中」で停止すると、すでに実行されたすべての処理が失われるのですか? たとえば、VACUUMすでに100万のデッド行が見つかって停止した場合、この情報はすべて失われますか?VACUUMは完全にトランザクション的な方法で動作しますか(非常に多くのPostgreSQLプロセスのように、「すべてまたは何もない」)? すべての作業を失うことなくVACUUMを安全に中断できる場合、vacuum作業を段階的に行う方法はありますか?[100 ms動作し、停止し、10 ms待機して、残りの世界をブロックしないようにします...]。autovacuumパラメータを調整することでこれの一部を実行できることはわかっていますが、これをプログラムで制御できること、特定の時間/特定の条件下でそれを実行できるようにすることについて考えています。 注:プロセスを停止/キャンセル/強制終了するとは、次のことを意味します。 pgAdminを使用している場合は、[クエリのキャンセル]ボタンを押します。 プログラムで作業する場合は、pg_cancel_backend()を呼び出します。 どちらも同等だと思います。シェル/システムレベルのkillコマンドは使用していません。

2
SQL Serverの別のテーブルの値を使用してテーブルを更新する
データベースに2つのテーブルがあります。 表1 ------------------------------------------------------------------------- | name | family | phone | email | gender | phone2 | address | birthdate | ------------------------------------------------------------------------- テーブル#2 ----------------------------------------- | gender | address | phone | birthdate | ----------------------------------------- テーブル#1の列ではaddressとphone2は空で、列の性別と生年月日の値はテーブル#2と同じです。 どのように私はテーブル#2及び更新からデータを読み取ることができますアドレスとphone2のテーブル#2からの値を持つテーブル#1でのアドレスと電話するとき、列を性別と誕生日が各行に同じですか? 例:これは表#1の一部のデータです ------------------------------------------------------------------------- | name | family | phone | email | gender | phone2 | …

1
これらの同様のクエリが異なる最適化フェーズ(トランザクション処理とクイックプラン)を使用するのはなぜですか?
この接続アイテムのサンプルコード バグを示します SELECT COUNT(*) FROM dbo.my_splitter_1('2') L1 INNER JOIN dbo.my_splitter_1('') L2 ON L1.csv_item = L2.csv_item 正しい結果を返します。ただし、次の例では誤った結果が返されます(2014年、新しいCardinality Estimatorを使用) SELECT (SELECT COUNT(*) FROM dbo.my_splitter_1('2') L1 INNER JOIN dbo.my_splitter_1('') L2 ON L1.csv_item = L2.csv_item) L2の結果が共通のサブ式スプールに誤ってロードされ、L1の結果の結果が再生されるためです。 2つのクエリの動作の違いがなぜなのか興味がありました。トレースフラグ8675は、動作search(0) - transaction processingするものが入り、失敗するものが入っていることを示していますsearch(1) - quick plan。 したがって、追加の変換ルールの可用性は動作の違いの背後にあると考えられます(BuildGbApplyまたはGenGbApplySimpleを無効にすると、たとえば修正されるようです)。 しかし、これらの非常によく似たクエリの2つの計画で、異なる最適化フェーズが発生するのはなぜですか?私が読んだことからsearch (0)、少なくとも3つのテーブルが必要であり、最初の例ではその条件は確かに満たされていません。

3
SET TRANSACTION ISOLATION LEVELの利点はコミットされていません
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED私が一般的なSQLクエリの大部分で使用しているのは、主に言語を最初に学習したときにこれがドリルダウンされたためです。 私の理解では、この分離レベルは、WITH (NO LOCK)私が使用する傾向があるのと同じように機能しますSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED。 私が使用してしなければならないという時間今までありWITH (NO LOCK)オーバーがSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED。 DOESは SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED私が読んでいていることの表からロックアウトされることから、他のユーザーを停止しますか? 場合は SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED、ストップロックに使用されているが、私はデータのみを読んでいます、それを使用してのポイントは何ですか?ロックを生成するのはシステム集中型のクエリだけですか?たとえば5〜10秒で返されるクエリを実行するときに使用する価値はありますか。 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDおそらくダーティデータの更新を避けるために、更新で使用されるデータを読み取るときは使用しないように言わ れました。これが唯一の理由でしょうか? 私が取り組んでいるデータベースのタイプには、実稼働環境とテスト環境があります。実稼働環境にクエリを実行することはほとんどありませんが、必要に応じて、通常SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDはクエリで使用します。これでダーティリードが可能であることを理解しています。最終的にデータベースにコミットされない可能性のあるデータを受信する(そして結果を破棄する)以外に、他の種類の「ダーティリード」は可能ですか? 大量の質問で申し訳ありません。

2
tempdbにファイルを追加するコンテキストでのホットスポットとは何ですか?
SQL Serverサービスを再起動せずにtempdbファイルをSQL Serverに追加できるかどうかを確認しようとしています。私はここでデータベース管理者にこの答えを見ました: Tempdbファイルの追加には再起動が必要 そして1つの答えは次のとおりです。 追加-停止は不要です。MicrosoftのSeanが指摘したように、SQLはより低い値のファイルを使用することを好みます。1つのデータファイルから追加する場合、SQLはしばらくの間新しいデータファイルを使用しますが、ファイルが1つしかない場合よりもパフォーマンスは低下しません。ただし、すでに2+があり、もう1つ追加すると、新しいホットスポットにホットスポットが追加され、パフォーマンスが低下します。 ただし、コメントでは次の点に注意してください。 「追加」の部分に補遺を追加します。「追加:いいえ。ただし、不均衡になる可能性が高いため、ホットスポットになり、事態がさら​​に悪化する可能性があります。」 私はそのコメントについて次の質問を持っていますが、その質問の回答のコメントを介してコメンターに質問するのではなく、自分の新しい質問(この質問)で質問するように指示されました。 具体的には: ホットスポットとは何ですか?(Google経由で情報を入手しましたが、ファイルを追加した後にtempdbでホットスポッティングを行うと何が起こるか詳細に説明しませんでした) ホットスポットはtempdbの状況をさらに悪化させますか? DBのどの特定のものがさらに悪化しますか?

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