データベース管理者

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

2
SQL Developerコードのフォーマット
いくつかのSQLコードを切り取ってSQL開発者(4.0.2.15)に貼り付けました。右マージンを設定し、それをフォーマットするためにCTRL + F7を選択しました。しかし、私には2つの問題があります コードは私が設定した右マージンよりも広いです キーワードは大文字であり、ここでのコーディング標準は小文字です。 これを変更する方法を見つけることができませんでしたか、それとも可能ですか?

1
FOREIGN KEYに明示的な単一のKEY値を持つMERGE JOIN(INDEX SCAN)を克服する
追加7/11問題は、MERGE JOIN中のインデックススキャンが原因でデッドロックが発生することです。この場合、トランザクションはFK親テーブルでインデックス全体のSロックを取得しようとしますが、以前は別のトランザクションがインデックスのキー値にXロックをかけています。 小さな例から始めましょう(70-461コースのTSQL2012 DBが使用されています): CREATE TABLE [Sales].[Orders]( [orderid] [int] IDENTITY(1,1) NOT NULL, [custid] [int] NULL, [empid] [int] NOT NULL, [shipperid] [int] NOT NULL, ... ) 列[custid], [empid], [shipperid]は、[Sales].[Customers], [HR].[Employees], [Sales].[Shippers]それに応じて相互に関連するパラメーターです。いずれの場合も、親テーブルの参照列にクラスター化インデックスがあります。 ALTER TABLE [Sales].[Orders] WITH CHECK ADD CONSTRAINT [FK_Orders_Customers] FOREIGN KEY([custid]) REFERENCES [Sales].[Customers] ([custid]) ALTER TABLE [Sales].[Orders] WITH CHECK ADD CONSTRAINT …

3
1つを除くすべての列を主キーとしてマークすることは妥当ですか?
映画を表すテーブルがあります。フィールドは次のとおり id (PK), title, genre, runtime, released_in, tags, origin, downloadsです。 重複する行によってデータベースを汚染することはできないため、一意性を強制したいと思います。問題は、異なる映画が同じタイトルを持つ可能性があることです、または同じフィールドを除くtagsとdownloads。一意性を強制する方法は? 私は2つの方法を考えました: downloads主キーを除くすべてのフィールドを作成します。downloadsそれはJSONであり、おそらくパフォーマンスに影響を与えるため、私は締め出します。 id主キーとしてのみ保持しますが、他のすべての列(再度、を除くdownloads)で一意制約を追加します。 よく似たこの質問を読みましたが、どうすればいいのかよくわかりませんでした。現在、このテーブルは他のテーブルとは関係ありませんが、将来的には関係する可能性があります。 現時点では20,000件弱のレコードですが、その数は増えると思います。これが問題にある程度関連しているかどうかはわかりません。 編集:私はスキーマを変更しました、そしてここに私がテーブルを作成する方法があります: CREATE TABLE movies ( id serial PRIMARY KEY, title text NOT NULL, runtime smallint NOT NULL CHECK (runtime >= 0), released_in smallint NOT NULL CHECK (released_in > 0), genres text[] NOT NULL default …

2
Postgres 9.4でJSON配列要素でjson_to_recordを使用すると、「エラー:不正な形式の配列リテラル」
これは問題をうまく説明しています: 列bがテキストではなく配列である場合、次のように機能します。 select * from json_to_record('{"a":1,"b":["hello", "There"],"c":"bar"}') as x(a int, b text, d text); a | b | d ---+--------------------+--- 1 | ["hello", "There"] | しかし、b列を配列として定義すると、次のエラーが発生します。 select * from json_to_record('{"a":1,"b":["hello", "There"],"c":"bar"}') as x(a int, b text[], d text) ERROR: malformed array literal: "["hello", "There"]" DETAIL: "[" must introduce explicitly-specified array …

2
整数シーケンスが特定のサブシーケンスを含む行を検索します
問題 注:PostgreSQLのシーケンスメカニズムではなく、数学的なシーケンスを参照しています。 整数のシーケンスを表すテーブルがあります。定義は次のとおりです。 CREATE TABLE sequences ( id serial NOT NULL, title character varying(255) NOT NULL, date date NOT NULL, sequence integer[] NOT NULL, CONSTRAINT "PRIM_KEY_SEQUENCES" PRIMARY KEY (id) ); 私の目標は、指定されたサブシーケンスを使用して行を見つけることです。つまり、sequenceフィールドが指定されたサブシーケンスを含むシーケンスである行(私の場合、シーケンスは順序付けされています)。 例 テーブルに次のデータが含まれているとします。 +----+-------+------------+-------------------------------+ | id | title | date | sequence | +----+-------+------------+-------------------------------+ | 1 | BG703 | 2004-12-24 …

1
ファイルグループの設定をRESTRICTED_USERからMULTI_USERに変更すると、データベースミラーが機能しなくなるのはなぜですか。
:私の環境は以下である VMWareの5.5活発化サーバーMS Windows Serverの2008R2エンタープライズドメインおよびSQL Server 2008 R2のエンタープライズ。ファイバーチャネル接続による集中型ストレージ。 にパーティションがありますSQL Server DB。2 file groupsつあります。1つはライブデータ(FG1)、2つ目は履歴データ(HDG)です。 2番目のファイルグループはread-onlyです。毎月パーティションで移動を行います-(前月の)新しいデータを履歴データに追加します。このプロセスは自動です。 データベースを新しいサーバーに移動しました。最初は、手動でプロセスを実行する必要がありました。この操作中に、次のエラーでミラーが故障します(操作3の後-以下のプロセスフローを参照)。 プリンシパルサーバー: ログの行0: Date 15.6.2015 20:54:11 Log SQL Server (Current - 16.6.2015 07:55:00) Source spid84 Message Setting database option MULTI_USER to ON for database MYDB. ログの行1: Date 15.6.2015 20:54:11 Log SQL Server (Current - 16.6.2015 07:55:00) Source …

1
大きく異なるキーを持つキーと値のペアのセットを効率的に格納する
さまざまな種類の活動をサイトに関連付けるアプリケーションを継承しました。アクティビティタイプはおよそ100種類あり、それぞれに3〜10個のフィールドの異なるセットがあります。ただし、すべてのアクティビティには、少なくとも1つの日付フィールド(日付、開始日、終了日、予定された開始日などの任意の組み合わせ)と、1つの担当者フィールドがあります。他のすべてのフィールドは大きく異なり、開始日フィールドは必ずしも「開始日」と呼ばれるわけではありません。 アクティビティタイプごとに1つのサブタイプテーブルを作成すると、スキーマが100の異なるサブタイプテーブルになり、扱いにくいので扱いにくくなります。この問題の現在の解決策は、アクティビティ値をキーと値のペアとして保存することです。これは、ポイントを理解するために、現在のシステムを大幅に簡略化したスキーマです。 各アクティビティには複数のActivityFieldsがあります。各サイトには複数のアクティビティがあり、SiteActivityDataテーブルには各SiteActivityのKVPが格納されます。 これにより、(Webベースの)アプリケーションのコーディングが非常に簡単になります。必要なのは、特定のアクティビティのSiteActivityDataのレコードをループし、各行のラベルと入力コントロールをフォームに追加することだけです。しかし、多くの問題があります: 整合性は悪いです。アクティビティタイプに属さないフィールドをSiteActivityDataに配置することは可能です。DataValueはvarcharフィールドであるため、数値と日付を常にキャストする必要があります。 このデータのレポートとアドホッククエリは難しく、エラーが発生しやすく、低速です。たとえば、指定された範囲内の終了日を持つ特定のタイプのすべてのアクティビティのリストを取得するには、ピボットとvarcharを日付にキャストする必要があります。レポートの執筆者たちはこのスキーマを憎んでおり、私は彼らを責めません。 だから私が探しているのは、レポートが簡単になるような方法で、共通のフィールドがほとんどない多数のアクティビティを保存する方法です。これまでに思いついたのは、XMLを使用して疑似非SQL形式でアクティビティデータを格納することです。 Activityテーブルには、各アクティビティのXSDが含まれるため、ActivityFieldテーブルは不要になります。SiteActivityにはキーと値のXMLが含まれるため、サイトの各アクティビティは1行に表示されます。 アクティビティは次のようになります(ただし、完全に具体化していません)。 <SomeActivityType> <SomeDateField type="StartDate">2000-01-01</SomeDateField> <AnotherDateField type="EndDate">2011-01-01</AnotherDateField> <EmployeeId type="ResponsiblePerson">1234</EmployeeId> <SomeTextField>blah blah</SomeTextField> ... 利点: XSDはXMLを検証し、データベースレベルで数値フィールドに文字列を入力するなどのエラーをキャッチします。これは、すべてをvarcharに格納していた古いスキーマでは不可能でした。 Webフォームの構築に使用されるKVPのレコードセットは、 select ... from ActivityXML.nodes('/SomeActivityType/*') as T(r) XMLのxpathサブクエリを使用して、ピボットを使用せずに、開始日、終了日などの列を持つ結果セットを作成できます。 select ActivityXML.value('.[@type=StartDate]', 'datetime') as StartDate, ActivityXML.value('.[@type=EndDate]', 'datetime') as EndDate from SiteActivity where... これは良い考えのように思えますか?このように多数の異なるプロパティセットを格納する他の方法は考えられません。既存のスキーマを保持し、データウェアハウスでクエリしやすいものに変換することも考えていましたが、スタースキーマを設計したことがなく、どこから始めればよいかわかりません。 追加の質問:XSDでを使用して日付データ型を持つタグを定義すると、xs:dateSQL Serverはそれを日付値としてインデックス付けしますか?日付でクエリを実行する場合、日付文字列を日付値にキャストし、インデックスを使用する可能性をなくす必要があるかどうか心配です。

1
PKの圧縮とテーブルの圧縮の違いは何ですか?
データ圧縮はテーブルで設定できます: CREATE TABLE dbo.SomeTable( SomeId [bigint] NOT NULL, OtherId [bigint] NOT NULL, IsActive [bit] NOT NULL, CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED ( SomeId Desc ) ) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE) そしてそれは主キーで定義できます: CREATE TABLE dbo.SomeTable( SomeId [bigint] NOT NULL, OtherId [bigint] NOT NULL, IsActive [bit] NOT NULL, CONSTRAINT [PK_Some] PRIMARY KEY …

2
PostgreSQLでのM:N関係の一括挿入
古いデータベースのデータを、構造が少し異なる新しいデータベースにインポートする必要があります。たとえば、古いデータベースには、従業員とその上司を記録するテーブルがあります。 CREATE TABLE employee (ident TEXT PRIMARY KEY, name TEXT, supervisor_name TEXT) 現在、新しいデータベースは次のとおりです。 CREATE TABLE person (id BIGSERIAL PRIMARY KEY, name TEXT, old_ident TEXT); CREATE TABLE team (id BIGSERIAL PRIMARY KEY); CREATE TABLE teammember (person_id BIGINT, team_id BIGINT, role CHAR(1)); つまり、上司の名前を持つ従業員のプレーンテーブルの代わりに、新しい(より汎用的な)データベースを使用して、人々のチームを作成できます。従業員は役割を持つメンバー、役割'e'を持つ上司's'です。 問題は、データをemployee新しい構造に簡単に移行する方法であり、従業員と監督者のペアごとに1つのチームです。たとえば、従業員 employee: ('abc01', 'John', 'Dave'), ('abc02', 'Kyle', 'Emily') 移行する …

2
SQL Server DBは夜間に使用できなくなります
昨日、私のSQL Serverデータベースは大丈夫でした。今日はほとんど使用できません-いつ攻撃したかによって、5から20倍の速度で減速します。 一部のデータは夜間のロードプロセスでサーバーに追加されましたが、データベースにそれほど影響を与えるはずのボリュームのようなものはありません。約50,000のプレーンテキストレコード(XMLやその他のフリッパーなし)。 今朝サーバーをリブートする前にパッチを当てました。ただし、パッチが適用された他のデータベースサーバーは、動作が異なります。 リソースモニターは、ディスクIOに問題があることを示唆しているようです。.mdfファイルの容量のほぼ100%で、データベースで実際にほとんど発生していない場合でも、常に実行されています。Templog.ldfへのアクセスも非常に高くなっています。 ここには誰もエキスパートDBA(私たちはSQLスキルの量がさまざまな開発者です)は誰もいません。私たちは、sp_updatestatsを実行して、大きなインデックスのいくつかを別のディスクに移動しようとしましたが、役に立ちませんでした。 私はこれがパッチと関係があるに違いないと思います-それはあまりにも多くの偶然のようです。同僚は、mdfのサイズを増加させる原因となったデータ負荷が、実行計画の非効率化の原因となったと確信しています。 これは一体何が原因ですか?どのようにしてそれを見つけ出し、それを修正するために何ができるでしょうか? 編集: を使用しsp_WhoIsActiveても、異常なことは何も明らかにされません。自分のsprocの使用と、現在別のインデックスを移動しようとしている同僚からのいくつかのコマンドを登録します。それはおそらく現在DBを保持していますが、以前と同じように実行されていませんでした。 SQL Server 2008 R2の標準バージョンです。SELECT @@VERSION与える: Microsoft SQL Server 2008 R2(SP2)-10.50.4033.0(X64) 2014年7月9日16:04:25 Copyright(c)Microsoft Corporation Standard Edition(64-bit)on Windows NT 6.1(Build 7601:Service Pack 1)(Hypervisor ) サーバーには、72GBのRAMと3つのクアッドコア2GHzプロセッサーが搭載されています。 パッチはWindowsにのみ適用されました。パッチ以外の変更はありませんでした。 選択した設定: _id name value minimum maximum value_in_use description is_dynamic is_advanced 1540 min memory per query (KB) …

3
Postgresはインデックススキャンではなく順次スキャンを実行しています
約1,000万行のテーブルと日付フィールドのインデックスがあります。結果セットに26項目しかない場合でも、インデックス付きフィールドの一意の値を抽出しようとすると、Postgresは順次スキャンを実行します。オプティマイザがこの計画を選ぶのはなぜですか?そして、私はそれを避けることができますか? 他の答えから、これはインデックスと同じくらいクエリに関連していると思います。 explain select "labelDate" from pages group by "labelDate"; QUERY PLAN ----------------------------------------------------------------------- HashAggregate (cost=524616.78..524617.04 rows=26 width=4) Group Key: "labelDate" -> Seq Scan on pages (cost=0.00..499082.42 rows=10213742 width=4) (3 rows) テーブル構造: http=# \d pages Table "public.pages" Column | Type | Modifiers -----------------+------------------------+---------------------------------- pageid | integer | not null default nextval('... …

2
MySQL:delete…where..in()対delete..from..join、およびサブセレクトを使用した削除時にロックされたテーブル
免責事項:データベースの内部に関する知識が不足していることをお許しください。ここに行く: データベースの定期的なクリーンアップジョブで大きなパフォーマンスの問題があるアプリケーション(私たちが作成したものではありません)を実行します。クエリは次のようになります。 delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1"); わかりやすく、読みやすく、標準SQL。しかし、残念ながら非常に遅いです。クエリを説明すると、既存のインデックスVARIABLE_SUBSTITUTION.BUILDRESULTSUMMARY_IDが使用されていないことがわかります。 mysql> explain delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( -> select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY -> where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1"); | id | select_type | table | type | possible_keys | key | …

1
Postgresに大量のテキストを保存するための圧縮オプションは何ですか?
大量のテキストをPostgresに保存する必要があります。主にコマンドログと長時間実行コマンドの出力であり、zlibなどのツールを使用してデータを透過的に圧縮できるいくつかの設定があるかどうか、または他のネイティブなスペース節約方法を知る必要があります。 。 データは主に読み取り専用データであるため、書き込みは問題になりません。

1
MySQLデータベースinformation_schema、performance_schema、mysql、phpmyadminのバックアップが必要ですか?
information_schemaデータベースをバックアップする必要がないことはわかっていますが、次のデータベース(ユーザー定義データベース以外)はどうなりますか? performance_schema mysql phpmyadmin (つまり、問題が発生した場合、最初からやり直す必要があります(新しいMySQLインストール)。どのデータベースを元に戻す必要がありますか?)

1
PostgreSQL byteaとsmallint []
大規模な(100Mb-1 GB)マルチチャネル時系列データをPostgreSQLデータベースにインポートしようとしています。データは、通常はそれぞれ数秒の「レコード」または「エポック」にデータを分割するEDF形式のファイルから取得されます。各エポックのレコードは、データの各チャネルの信号を短い整数の順次配列として保持します。 最悪の場合、BLOBとしてデータベース内にファイルを保存するように義務付けられています。そこで、信号データに基づくクエリを容易にするなど、データベース内のデータをさらに活用できるオプションを調査したいと思います。 私の最初の計画は、エポックレコードごとに1行としてデータを格納することです。私が比較検討しているのは、実際の信号データをbyteaまたはsmallint [](またはsmallint [] [])のどちらのタイプとして格納するかです。誰かが他のものを推薦することはできますか?ストレージとアクセスのコストに興味があります。使用法は、1回挿入され、時々読み取られ、決して更新されない可能性があります。レコードを比較して分析するための関数を追加できるように、カスタムタイプとしてより簡単にまとめることができれば、はるかに優れています。 間違いなく私は詳細が低いので、私が明確にしてほしいことについてコメントを追加してください。

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