データベース管理者

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

6
json_agg内の列を選択します
次のようなクエリがあります: SELECT a.id, a.name, json_agg(b.*) as "item" FROM a JOIN b ON b.item_id = a.id GROUP BY a.id, a.name; JSONオブジェクトに含まれbないように列を選択するにはどうすればよいb.item_idですか? について読みましたがROW、次のようなJSONオブジェクトを返します。 {"f1": "Foo", "f2": "Bar"} 適切な列キーに一致するように取得したら、JSONオブジェクトを再マップする必要があります。それを避け、元の列名を保持したいと思います。

4
2つのテーブルを結合して、2番目のテーブルの行を取得する方法
単純な投票システムでは CREATE TABLE elections ( election_id int(11) NOT NULL AUTO_INCREMENT, title varchar(255), CREATE TABLE votes ( election_id int(11), user_id int(11), FOREIGN KEYs ユーザーが投票した選挙のリストを取得するには、次のJOINが使用されます SELECT * FROM elections JOIN votes USING(election_id) WHERE votes.user_id='x' しかし、ユーザーが投票していない選挙のリストを取得する方法は?
21 join  select 

3
Postgresのマテリアライズドビューの定義を照会する
Postgresでマテリアライズドビューの定義をクエリする方法を疑問に思っています。参考までに、私がやりたいことは、通常のビューでできることと非常に似ています。 SELECT * FROM information_schema.views WHERE table_name = 'some_view'; 次の列が表示されます。 table_catalog table_schema table_name view_definition check_option is_updatable is_insertable_into is_trigger_updatable is_trigger_deletable is_trigger_insertable_into マテリアライズドビューでこれは可能ですか? これまでの私の調査から、マテリアライズドビューはinformation_schemaから意図的に除外されているようです。 information_schemaは、SQL標準に存在するオブジェクトのみを表示できます。 (http://www.postgresql.org/message-id/3794.1412980686@sss.pgh.pa.us) それらはinformation_schemaから完全に除外されているように見えるので、私はこれについてどうするかわかりませんが、私がやりたいことは2つあります: 特定のマテリアライズドビューが存在するかどうかを照会します。(これまでのところ、これを行うことがわかった唯一の方法は、同じ名前のマットビューを作成し、それが爆発するかどうかを確認することです。) 次に、マテリアライズドビューの定義を照会します(view_definition上の列と同様information_schema.views)。

2
ビットマップインデックススキャンを使用するクエリプランの「Recheck Cond:」行
これは、コメントから前の質問へのスピンオフです。 Postgres 9.4.4クエリには永遠に時間がかかります PostgreSQL 9.4を使用すると、Recheck Cond:によるクエリプラン出力でビットマップインデックススキャンの後に常に行があるように見えますEXPLAIN。 EXPLAIN参照された質問の出力のように: -> Bitmap Heap Scan on table_three (cost=2446.92..19686.74 rows=8159 width=7) Recheck Cond: (("timestamp" > (now() - '30 days'::interval)) AND (client_id > 0)) -> BitmapAnd (cost=2446.92..2446.92 rows=8159 width=0) -> Bitmap Index Scan on table_one_timestamp_idx (cost=0.00..1040.00 rows=79941 width=0) Index Cond: ("timestamp" > (now() - '30 days'::interval)) …

1
MySQL Explainのフィルター処理の意味は何ですか?
ここにMySQLドキュメントで説明されているように: フィルター処理された列は、テーブル条件によってフィルター処理されるテーブル行の推定パーセンテージを示します。つまり、rowsは調べた行の推定数を示し、rows×Filtered / 100は前のテーブルと結合される行数を示します。MySQL 5.7.3より前では、EXPLAIN EXTENDEDを使用すると、この列が表示されます。MySQL 5.7.3の時点では、拡張出力はデフォルトで有効になっており、EXTENDEDキーワードは不要です。 まだわかりません。ここで「フィルタリング」の意味は何ですか?このコラムからどのような情報を入手できますか? たとえば、クエリを開始すると、一部のクエリには100が表示され、他のクエリには18または100未満の値が表示されます。 +-------------+-------+--------+---------+---------+------+----------+ | select_type | table | type | key | key_len | rows | filtered | +-------------+-------+--------+---------+---------+------+----------+ | PRIMARY | a | range | search | 4 | 174 | 18.00 | <-- | PRIMARY | b | eq_ref | PRIMARY …

3
開発者のマシンでmysqlダンプのインポートが非常に遅い
SQLダンプがあり、かなり大きく(411 MB)、サーバーAにインポートするのに10分かかりました。ワークステーションBに同じインポートを行うと、インポートに8時間(pipeviewer)の見積もり(40分で31 MBをインポートしました) )したがって、これはファクター53の方が遅くなります。 仕様: Server A: MySQL Version: 5.5.30-1.1 (Debian) 2 GB RAM 1 core QEMU Virtual CPU version 1.0 - cpu MHz: 3400.020 Workstation B: MySQL Version: 5.5.41-MariaDB-1ubuntu0.14.04.1 14 GB RAM 4 cores Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz - cpu MHz: 1600.000 mysql / maria構成は、ストック構成です。 昨日、ワークステーションでMariaDBに切り替えましたが、MariaDBの前は統計がさらに悪化していました。 ワークステーション上のすべてのデータベースをすでに削除しました-違いはありません。 …

1
SQL Server 2019の結果セットキャッシングを有効にするにはどうすればよいですか?
SQL Server 2019 CTP 2.3は、is_result_set_caching_onを含むいくつかの新しい列をsys.databasesに追加しました。 SQL Server 2019の新機能やALTER DATABASEページにはまだ記載されていません。 私は笑いのために加速データベース復旧と同じ構文を使用してみました: ALTER DATABASE StackOverflow2013 SET RESULT_SET_CACHING ON; しかし、運がない: Msg 5058, Level 16, State 12, Line 8 Option 'RESULT_SET_CACHING' cannot be set in database 'StackOverflow2013'.

5
SQL Serverのクラッシュ耐性を改善できますか?
定期的に電源が失われるSQL Server(2008 SP4および2016 SP1)を実行しているPCがあります。明らかに、これによりSQL Serverデータベースの(インデックス)破損が発生する場合があり、後で復元する必要があります。 SQL Serverはそのようなシナリオ向けに設計されていないことを認識しています。正しい解決策は、電力損失の原因を修正することです(興味がある場合は、以下で詳しく説明します)。それにもかかわらず、電力損失時のデータベース破損のリスクを減らすために設定できるSQL Serverのチューニングオプションはありますか? 背景:「PC」は、フォークリフトに搭載されたWindowsタブレットです。ユーザーがフォークリフトをオフにすると、タブレットの電源が切れます。私たちは、フォークリフトをオフにする前にWindowsを適切にシャットダウンするようにユーザーに教えようとしましたが、失敗しました(ほとんどの場合、それをオフにするだけで機能するためです)。現在、電力損失時にタブレットにシャットダウンするように信号を送るUPSを追加するなど、他のオプションも調査しています。
20 sql-server  crash 

2
十分な計画が見つからないクエリが見つかりました
SQL Server 2012データベースがあります。私はReason for early termination of statement optimizationいくつかのクエリの価値に気付き、すべてが与えましたGood Enough Plan Found。私の質問は次のとおりです。 「ステートメント最適化の早期終了の理由」のすべての可能なタイプは何ですか。msdnでこれを検索しましたが、値の完全なリストを取得できませんでした。 Good Enough Plan Found以外の理由で最適化が終了したすべてのクエリをリストするDMVまたは拡張イベントはありますか?可能性の完全なリストを掲載していない次の2つの記事を参照しました。[また、私のデータベースでは異なる結果が得られます]。 検出:クエリコンパイルタイムアウト 十分ではないクエリプランの特定

4
「時々」遅いクエリの診断に関するアドバイス
カバリングインデックスを介してインデックス付きビューから結果を返すストアドプロシージャがあります。通常、高速(約10ミリ秒)で実行され、最大8秒まで実行されることもあります。 ランダム実行の例を次に示します(注:これは低速ではありませんが、クエリテキストは、渡される値を除いて同じです)。 declare @p2 dbo.IdentityType insert into @p2 values(5710955) insert into @p2 values(5710896) insert into @p2 values(5710678) insert into @p2 values(5710871) insert into @p2 values(5711103) insert into @p2 values(6215197) insert into @p2 values(5710780) exec ListingSearch_ByLocationAndStatus @statusType=1,@locationIds=@p2 スプロックは次のとおりです。 ALTER PROCEDURE [dbo].[ListingSearch_ByLocationAndStatus] @LocationIds IdentityType READONLY, @StatusType TINYINT AS BEGIN SET NOCOUNT ON; …

3
高速(<1s)の読み取りクエリパフォーマンスを備えた大規模(> 22兆項目)地理空間データセット
私は、迅速な読み取りクエリのパフォーマンスを必要とする大規模な地理空間データセット用の新しいシステムを設計しています。したがって、次の状況で必要なパフォーマンスを達成するために、適切なDBMS、データ構造、または代替方法について可能性があると思うか、経験/アドバイスを持っている人がいるかどうかを確認したいと思います。 データは、処理された衛星レーダーデータから継続的に生成され、グローバルカバレッジになります。衛星の解像度と地球の土地被覆率に基づいて、全データセットを推定して、地球上の750億の場所で値を生成します。単一の衛星の寿命にわたって、出力はこれらの場所のそれぞれで最大300の値を生成します(したがって、22兆を超える値の合計データセット)。これは1つの衛星のためのものであり、軌道上にはもう1つの衛星があり、新しい数年でもう2つの衛星が計画されています。したがって、多くのデータがあります!単一のデータアイテムは非常に単純で、(経度、緯度、値)のみで構成されますが、アイテムの数が原因で、1つの衛星で最大100 TBを生成すると推定しています。 書き込まれたデータは更新する必要はありません。新しい衛星の取得が処理されると成長するからです。書き込みパフォーマンスは重要ではありませんが、読み取りパフォーマンスは重要です。このプロジェクトの目標は、Googleマップ上のレイヤーなどのシンプルなインターフェイスを介してデータを視覚化できるようにすることです。各ポイントには、時間の平均、勾配、または何らかの関数に基づいた色付きの値があります。(投稿の最後にデモ)。 これらの要件から、データベースはスケーラブルである必要があり、クラウドソリューションを検討する可能性があります。システムは、「points near(lat、lon)」や「points within(box)」などの地理空間クエリを処理できる必要があります。また、単一のポイントと最大で50,000ポイント(ただし、最大200,000ポイントが望ましい)。 これまでのところ、1億1100万の場所に最大7億5,000万のデータ項目のテストデータセットがあります。私はpostgres / postGISインスタンスを試してみましたが、これは問題なく動作しましたが、シャーディングの可能性がなければ、これはデータの増加に応じて対処できるでしょう。シャーディングでは、データボリュームに合わせて拡張するだけで十分な場合があります。最近、私はelasticsearchについて少し学んだので、これについてのコメントは私にとって新しいので役立つでしょう。 完全なデータセットで達成したいものの簡単なアニメーションを次に示します。 このgif(私のpostgresトライアルから)は(6x3)事前に計算されたラスタータイルを提供し、それぞれが〜200,000ポイントを含み、それぞれを生成するのに〜17秒かかります。ポイントをクリックすると、1秒未満で最も近い場所にあるすべての履歴値を取得して、グラフが作成されます。 長い投稿に謝罪、すべてのコメント/アドバイスは大歓迎です。

2
連結演算子が入力よりも少ない行を推定するのはなぜですか?
次のクエリプランスニペットでは、Concatenation演算子の行推定値はである必要があること~4.3 billion rows、またはその2つの入力の行推定値の合計であることは明らかです。 しかし、の推定値は~238 million rows、最適につながる、生成されるSort/ Stream AggregatetempdbのにデータのGB数百をこぼし戦略。この場合の論理的に一貫した推定は、を生成しHash Aggregate、流出を除去し、クエリパフォーマンスを劇的に改善します。 これはSQL Server 2014のバグですか?入力よりも低い見積もりが合理的である有効な状況はありますか?どのような回避策が利用可能ですか? ここで完全なクエリプラン(匿名化)が。出力QUERYTRACEON 2363または類似のトレースフラグを提供するためにこのサーバーにsysadminアクセスすることはできませんが、役立つ場合は管理者からこれらの出力を取得できる場合があります。 データベースは互換性レベル120にあるため、新しいSQL Server 2014 Cardinality Estimatorを使用しています。 統計は、データがロードされるたびに手動で更新されます。データ量を考えると、現在デフォルトのサンプリングレートを使用しています。より高いサンプリングレート(またはFULLSCAN)が影響を与える可能性があります。

1
LIKE N '% %'の検索がUnicode文字に一致し、=N' 'が多くに一致するのはなぜですか?
DECLARE @T TABLE( Col NCHAR(1)); INSERT INTO @T VALUES (N'A'), (N'B'), (N'C'), (N'Ƕ'), (N'Ƿ'), (N'Ǹ'); SELECT * FROM @T WHERE Col LIKE N'%�%' 返品 Col A B C Ƕ Ƿ Ǹ SELECT * FROM @T WHERE Col = N'�' 返品 Col Ƕ Ƿ Ǹ 以下ですべての可能なダブルバイト「文字」を生成=すると、LIKE N'%�%'バージョンがそれらの21,229に一致し、すべてのバージョンに一致することがわかります(同じ結果でいくつかの非バイナリ照合を試しました)。 WITH T(I, N) AS …

1
GUIを使用したデータベースの復元-復元するファイルが間違っています
SSMSのグラフィックインターフェイスをいじり、「復元」タスクのオプションを検討しています。 「スクリプトを生成する」をクリックすると、クエリの最初の行が次のようになります。 RESTORE DATABASE [MyDatabase] FROM DISK = N'Server_Patch\Database_name_LOGSHIPPING.BKP' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5 ( and a lot of log backups for point in time ) OK、問題ありませんが、このデータベースの毎日のバックアップを行っています。これDatabase_name_LOGSHIPPING.BKPは、1か月前にログ配布用に作成したファイルの名前でした。 SSMSグラフィックインターフェイスを使用してバックアップを復元しようとすると、このバックアップファイルを指すのはなぜですか?このファイルはもうありません。 MSSQLTIPSのこのクエリを使用すると、このデータベースのすべてのバックアップを確認できます。 SELECT CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, msdb.dbo.backupset.database_name, msdb.dbo.backupset.backup_start_date, msdb.dbo.backupset.backup_finish_date, msdb.dbo.backupset.expiration_date, CASE msdb..backupset.type WHEN 'D' THEN 'Database' WHEN 'L' …

1
サービスブローカーはバックアップされ、現在受信中ですが、処理していないようです
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 4年前に移行され ました。 イベント通知に問題がある。メッセージが送信されるマシン/ドライブ/データベース(受信者)では、誰も見ていないときにドライブがいっぱいになったため、1日中バックアップされています。 ドライブのスペースを解放したので、キューへのメッセージを受け入れていますが、メッセージを処理しているようには見えません-キューには現在2,200万のメッセージがあり、成長していますが(!)。キューが有効になっています: is_activation_enabled = 1 is_receive_enabled = 1 is_enqueue_enabled = 1 アクティブ化されたSPはactivation_procedureに表示されますが、SP_WHOISACTIVE、アクティブなリーダーはていません。 ドライブを再び吹き消す前に、何が間違っていますか?メッセージを処理またはフラッシュするにはどうすればよいですか?前もって感謝します。 更新 1つの考え-私が持っているのでis_enqueue_enabled、すべてのメッセージを処理できるまですべてのメッセージを保存しているのでしょうか?もしそうなら、それを安全にオフにできますか? CREATE PROCEDURE [dbo].[Parse_EN_Messages] AS --mdb 2012/09/05 version 1.2 -- With apologies and thanks to Remus Rusanu, Jonathon Kehayias, Mladen Prajdic, and Jasper Smith for writing -- about EN, answering questions, …

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