データベース管理者

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

1
自動更新統計が統計を更新しない
使用していますSQL SERVER 2012私は私の持っているAuto Update Stats ONを自分のデータベースに。 下記のリンクから、自動更新の統計情報がSQRT(1000 * Table rows)テーブルの行が変更されるたびに発生することがわかりました。 https://blogs.msdn.microsoft.com/srgolla/2012/09/04/sql-server-statistics-explained/ 1000レコードのテーブルを作成しました SELECT TOP 500 Row_number()OVER (ORDER BY (SELECT NULL)) rn, name INTO stst FROM sys.objects 統計の作成 CREATE STATISTICS rn ON stst (rn) CREATE STATISTICS name ON stst (name) 作成した統計の確認 DBCC show_statistics('stst', rn) -- Rows 500 DBCC show_statistics('stst', name) -- …

2
指定された値から別の指定された値までの行を選択します
複数の列を含むテーブルがあり、列の値を確認したいのですが、別の列の値が表示されるまで、その列の値の後の行を選択します。私はを使用してみましたBETWEENが、列の値が整数の場合、整数間の数値のみを検索します。 たとえば、次のようなテーブルがあるとします。 id時間値 t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 PM 16 t5 12:10 PM 250 t5 12:15 PM 15 t8 11:00 AM 15 t8 3:00 PM 2 t8 3:05 PM 100 t2 7:00 PM 15 t2 7:01 PM 16 t15 5:00 AM …

3
誰かが何百万もの更新を実行している奇妙な行動を説明できますか?
誰かがこの動作を私に説明できますか?OS Xでネイティブに実行されているPostgres 9.3で次のクエリを実行しました。インデックスサイズがテーブルサイズよりも大きくなる可能性がある動作をシミュレートしようとしましたが、さらに奇妙なものが見つかりました。 CREATE TABLE test(id int); CREATE INDEX test_idx ON test(id); CREATE FUNCTION test_index(batch_size integer, total_batches integer) RETURNS void AS $$ DECLARE current_id integer := 1; BEGIN FOR i IN 1..total_batches LOOP INSERT INTO test VALUES (current_id); FOR j IN 1..batch_size LOOP UPDATE test SET id = current_id + …

1
外部サーバーのアクセス許可が拒否されました
私は、外部テーブルを作成できるように制限された権限を持つユーザーを設定しようとしています。2つのデータベースがhr_dbありaccounting_dbます。のhr_userユーザーhr_dbとのaccounting_userユーザーを作成しましたaccounting_db。accounting_userユーザーにhr_db、usersテーブルなどの一部のテーブルに対する選択権限のみを付与したい。これを行うには、スーパーユーザーとしてhr_dbデータベースにアクセスして実行しました。 GRANT CONNECT ON DATABASE hr_db TO accounting_user; GRANT SELECT ON people TO accounting_user; 私はへの接続を設定hr_dbからaccounting_db外国データラッパを使用しました: CREATE SERVER hr_db FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'localhost', dbname 'hr_db', port '5432'); 次に、accounting_userユーザーのマッピングを追加しました。 CREATE USER MAPPING FOR accounting_user SERVER hr_db OPTIONS (user 'accounting_user', password 'secretpassword'); のパスワードaccounting_userは、コマンドラインからのログインに使用するものと同じです。これはうまくいきます: psql -U accounting_user -W hr_db [enter accounting_user …

2
Mongodumpがアプリのパフォーマンスに本当に悪い影響を与える
シャーディングのない非常に大きなmongoインスタンス(150 GB)があり、定期的なバックアップ(mongodump)はアプリのパフォーマンスに非常に大きな影響を与えます。さらに悪いことに、アプリはmongoを頻繁に使用するため、バックアップは10時間以上かかります。 シャーディングが必要であることはわかっています。ElasticSearchに移行する計画があるので、短期的な解決策を探しています。 mongodumpの1秒あたりのクエリ数を制限するなど、これを改善するために何かできることはありますか? 32コアの190 GB RAMサーバーにスタンドアロンのmongoがあり、それをnginx、rabbitmqなどと共有しています。今までで最もクリーンなセットアップではない、私は知っている:)
8 backup  mongodb 

4
同時グループ予約の戦略は?
座席予約データベースを検討してください。nシートのリストがあり、それぞれに属性がありますis_booked。0はそうでないことを意味し、1はそうであることを意味します。それ以上の数でオーバーブッキングがあります。 オーバーブッキングを許可せずに複数のトランザクション(各トランザクションが同時にyシートのグループを予約する)の戦略は何ですか? 私は単にすべての未予約の座席を選択し、ランダムに選択されたyのグループを選択し、それらすべてを予約し、その予約が正しいかどうかを確認します(別名is_bookedの数が1を超えていない場合、座席を予約した別のトランザクションとコミット)、次にコミットします。それ以外の場合は中止して、再試行してください。 これは、Postgresで分離レベルのRead Committedで実行されます。

1
SQL Serverで$ IDENTITYは文書化され、信頼できますか?
SQL Serverが疑似列を使用してテーブルの(単一の)ID列の値を返すことができることを学びました$IDENTITY: SELECT $IDENTITY FROM Table この機能は文書化され、信頼できますか?それについての唯一の公式の言及はIDENTITYページにありますが、コードサンプルに埋め込まれています。これは、文書化されていないことを意図している可能性があることを示唆しています。この機能についても、Googleによる一致はほとんどありません。

7
デリミタに続くすべての後続部分文字列を生成するにはどうすればよいですか?
区切り文字の複数のインスタンスを含む可能性がある文字列が与えられた場合、その文字の後に始まるすべての部分文字列を生成したいと思います。 たとえば、次のような文字列'a.b.c.d.e'(または配列{a,b,c,d,e})を指定した場合、次のような配列を生成します。 {a.b.c.d.e, b.c.d.e, c.d.e, d.e, e} 意図された使用法は、別の列が書き込まれるときはいつでも、ドメイン名部分のクエリを容易にするための列を埋める(つまりq.x.t.com、クエリのすべてを見つけるt.com)ためのトリガーとしてです。 これを解決するには厄介な方法のように見えますが(そうなる可能性が非常に高いかもしれません)、このような関数を(Postgresの)SQLでどのように記述することができるか知りたいです。 これらはメールのドメイン名であるため、可能な最大要素数を特定することは困難ですが、大多数は<5です。

3
数値テーブルでクロス結合してラインの頂点を取得します。もっと良い方法はありますか?
質問: ESRIのユーザー定義データタイプを使用してOracle 12c ジオデータベースに格納された空間テーブル(道路線)SDE.ST_GEOMETRYがあります。最終的にそれらの座標にアクセスして更新できるように、線の頂点をリストします。SDO_GEOMETRY / Oracle Locatorを使用している場合は、関数を使用し ます。しかし、私はSDO_GEOMETRY / Oracle Locatorを使用しておらず、に同等の関数はありません。唯一の機能私は頂点に関係することを見つけることができますがありますと。SDO_UTIL.GETVERTICESSDE.ST_GEOMETRYSDE.ST_GEOMETRY ST_PointNST_NumPoints これをすべて正常に実行するクエリを考え出しました-行の頂点を行として取得します(このページから発想を得ています): 1 SELECT a.ROAD_ID 2 ,b.NUMBERS VERTEX_INDEX 3 ,a.SDE.ST_X(SDE.ST_PointN(a.SHAPE, b.NUMBERS)) AS X 4 ,a.SDE.ST_Y(SDE.ST_PointN(a.SHAPE, b.NUMBERS)) AS Y 5 FROM ENG.ROADS a 6 CROSS JOIN ENG.NUMBERS b 7 WHERE b.NUMBERS <= SDE.ST_NumPoints(a.SHAPE) 8 --removed to do explain plan: ORDER …

1
ヒープテーブルの更新-> RIDのデッドロック
特定のデッドロックシナリオを証明するためにテストケースを設定しており、何が起こっているのかについての洞察が必要です。ヒープテーブルは、HeapTableと呼ばれています。このテーブルは、2つのトランザクションによって同時に更新されます。 トランザクション1: BEGIN TRAN UPDATE HeapTable SET FirstName = 'Dylan' WHERE FirstName = 'Ovidiu'; WAITFOR DELAY '00:00:15'; UPDATE HeapTable SET FirstName = 'Bob' WHERE FirstName = 'Thierry'; ROLLBACK TRANSACTION トランザクション2: BEGIN TRAN UPDATE HeapTable SET FirstName = 'Pierre' WHERE FirstName = 'Michael'; ROLLBACK TRAN 最初にトランザクション1を起動し、その後にトランザクション2を続けます。予想どおり、トランザクション1はいくつかの排他的ロックといくつかの意図的な排他的ロックを要求します。トランザクション2が受信され、同じRIDで更新ロックを要求します。 spid dbid ObjId IndId Type …

1
EXECステートメントのquery_hashがゼロになるのはなぜですか?
私は、拡張イベントを使用してSQL Serverの監視システムをセットアップし、開発者向けの「運用フィードバック」として重いクエリを見つけています。私は、イベントを使用していますsp_statement_completedとsql_statement_completed、CPU_TIME上の述語フィルタを使用して、論理読み取り、など私は上の結果集計するために期待していたdatabase_nameし、query_hashすべてのインターネット上で多数の例で示されたように、結果に、私はそれが見るquery_hashすべての文のために0であります以下の表のように、EXECを使用します(読みやすくするためにタイムスタンプとクエリハッシュを短縮)。 name timestamp query_hash plan_handle statement sql_statement_completed 2016...6414 0 050056019600764... exec Shared.dbo.SyncFirm sql_statement_completed 2016...9946 0 06003d00e01e730... exec spSetUserAuth @userid; sql_statement_completed 2016...7184 0 0600e30028c9da0... exec spSetUserAuth @userid; sp_statement_completed 2016...0409 9826...578 0600c00028e6aa0... SELECT obfuscated_columns FROM dbo.SomeTable sp_statement_completed 2016...1448 8660...775 060084006d2d660... INSERT INTO dbo.SomeTable ( obfuscated_columns) EXEC(@sql) sql_statement_completed 2016...7752 0 0600f9006c23f03... exec …

1
SQL Serverデータベースの「デフォルト」テーブル
(SSMSを使用して)開発サーバーに新しいデータベースを追加すると、5つのテーブルが自動的に作成されます。 これらは、別のデータベースにすでに存在するアプリケーションテーブルのコピーです。 これは、テーブルが「共通」などのマークを付けられる場所がわからない最近のSQL Serverの機能であると想定しているため、新しいデータベースに自動的に追加されます。 しかし、どうすればそれを防ぐことができますか? 混乱を避けるため、このデータベースはスクリプト化されておらず、SSMS GUIから直接作成されます([データベース]> [新しいデータベース]を右クリック)。 (StackOverflowから移動)

1
AlwaysONは2014年から2016年に移行します
2014年には約500 DBSの20人のListnerがいます 最小限のダウンタイムと労力でこれらを移行する最良の方法は何ですか 私の考えは次のとおりです。アクセスの停止バックアップdbs復元の開始dbs復元の実行中:2014にAOGをドロップ2016に作成完了 これは簡単に見えますが、TBデータの場合、これにはしばらく時間がかかります。 > -持っているが、この見つかった 2014年から2016年までのAlwaysOn AGをアップグレードするための推奨方法を しかし、それはnietherを説明しません 誰かが助けてくれることを願っています

1
Oracleの2つのテーブルから階層データを取得するにはどうすればよいですか?
table1とtable2の2つのテーブルがあります。両方のテーブルを結合して階層的な出力が必要です。 Table1には3つのカテゴリCAT1、CAT2、およびCAT3が含まれ、1つの外部キー、つまりF_IDがもう1つのテーブルtable2の主キーであり、もう1つの列、つまりVALが含まれています。 TABLE 1 ----------------- CAT1 CAT2 CAT3 F_ID A a aa 1 A a ab 2 A b ba 3 A b bb 4 B c ca 5 B c cb 6 B d da 7 TABLE 2 ------------------- F_ID VAL 1 4 2 6 3 4 4 1 …

1
「スナップショットの蓄積」ファクトテーブルの「メジャータイプディメンション」
ターミナルでのコンテナの入口と出口を追跡する累積スナップショットファクトテーブルがあります。 コンテナーは3つの異なる方法で出入りできるので、これら3つの可能な方法(列車、船舶、またはトラック)をリストする特定のディメンションテーブルを作成することを考えました。 それから私はこのテクニックを間違っていると基本的に言っているこの記事を読みました、しかし私はその理由を理解できません。 最初の記事: ファクトテーブルに、個々の行にまばらに入力されているファクトの長いリストがある場合、ファクトテーブル行をメジャータイプディメンションで識別される単一の汎用ファクトに折りたたむメジャータイプディメンションを作成したくなることがあります。通常、この方法はお勧めしません。空のファクト列はすべて削除されますが、ファクトテーブルのサイズに各行の占有列の平均数が乗算され、列内の計算がはるかに困難になります。この手法は、潜在的なファクトの数が(数百単位で)極端な場合に許容されますが、特定のファクトテーブル行に適用できるのは一握りではありません。 「メジャータイプディメンション」がトランザクションファクトテーブルに実装されている場合、この他の記事にあるような問題が発生する可能性があることは理解していますが、スナップショットファクトの蓄積に使用してもマイナス面は見られません。 2番目の記事:( 「メジャータイプディメンション」の実装のいくつかの欠点) [...]「メジャータイプディメンション」を使用すると、この分析能力が失われます。1つのメジャーが他のメジャーと互換性がない場合、それらを合計することはできません。 [...]レポートを作成するためにSQLが実行する必要のあるパスの数が多いほど、レポートは遅くなります。 [...] BIツールでメジャータイプフィルターを配置しない場合、ユーザーが「ゴミ情報」を取得する危険があります。使いやすさの観点から見ると、このデザインはごみです。 Mark Storey-Smithの回答への応答 とても素敵なアプローチ、私はそれについて考えたことはなかったでしょう。 もう1つ:コンテナをターミナルに持ち込む車両のすべての出入り口には一意のIDがあり、次のような情報が得られます。車両の到着予定、実際の到着、船の場合はドック、トラックの場合は料金所、他の多くの情報... これらは3つの異なるファクトテーブルであり、何らかの方法でコンテナファクトテーブルにリンクする必要があります。 航海のIDはであると思ったdegenerate dimensionので、コンテナのファクトテーブルに直接入力します。だから、私の疑問は:コンテナーファクトテーブルに6つの異なるフィールド(vessel_voyage_in_key、vessel_voyage_out_key、train_voyage_in_key、train_voyage_out_key、truck_voyage_in_key、truck_voyage_out_key)または他の2つのフィールド(voyage_in、voyage_outに動的にリンクするvoyage_out)を追加する必要があるかどうかです。 私の疑問が明確になれば幸いです、ありがとう。

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