データベース管理者

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

1
PostgreSQL共通テーブル式と一時テーブル?
WITH上のPostgreSQLのドキュメントは、次の例を示します。 WITH regional_sales AS ( SELECT region, SUM(amount) AS total_sales FROM orders GROUP BY region ), top_regions AS ( SELECT region FROM regional_sales WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales) ) SELECT region, product, SUM(quantity) AS product_units, SUM(amount) AS product_sales FROM orders WHERE region IN (SELECT region FROM top_regions) GROUP …
11 postgresql 

5
大量(8400万行)のデータを効率的に転送
約8400万行あります。それらのすべてを同じサーバー上の別のデータベースに転送する必要があるので、ソースデータベースから約6000万行を削除するために削除します。 8,400万行はすべて同じテーブルにあります。そのテーブルだけでデータベース全体の90%を占めています。 つまり...ソース:8,400万行-> 2,400万行宛先:0行-> 8,400万行 ソースは完全復旧モードを実行しており、デスティネーションは単純に実行されます。 これを行う最も効率的な方法は何でしょうか? プランA: 1)挿入先に選択SELECT * FROMソース 2)切り捨てソース 3)ソースSELECT * FROM宛先WHERE keep_condition = 1に挿入 次の手段: 1)ソースデータベースのバックアップを宛先データベースとして復元します 2)宛先データベースで必要なテーブルを除くすべてのテーブルを削除します 3)TRUNCATEソース 4)INSERT INTO source SELECT * FROM destination WHERE keep_condition = 1に挿入します プランC: 1)挿入先に選択SELECT * FROMソース 2)DELETEソースWHERE keep_condition = 0 または、他の何か? ありがとう
11 sql-server 

1
nullable列をテーブルに追加すると10分以上かかる
テーブルに新しい列を追加するのに問題があります。 数回実行しようとしましたが、10分以上実行した後、ロック時間のためクエリをキャンセルすることにしました。 ALTER TABLE mytable ADD mycolumn VARCHAR(50); 有用な情報: PostgreSQLバージョン:9.1 行数:〜250K 列の数:38 null許容列の数:32 制約の数:5(1 PK、3 FK、1 UNIQUE) インデックスの数:1 OSタイプ:Debian Squeeze 64 (HeapTupleHeaderを介して)PostgreSQLがnull許容列を管理する方法に関する興味深い情報を見つけました。 私の最初の推測は、このテーブルには既に8ビットの32個のnull許容列があるためMAXALIGN、HeapTupleHeaderは4バイトの長さです(検証されていません。その方法がわかりません)。 したがって、新しいnull可能列を追加するには、新しい8ビットを追加するために、すべての行でHeapTupleHeaderを更新する必要があり、MAXALIGNパフォーマンスの問題を引き起こす可能性があります。 そこで、null許容列の数を31に減らすために、null許容列の1つ(実際には実際にはnull許容ではありません)を変更して、私の推測が正しいかどうかを確認しようとしました。 ALTER TABLE mytable ALTER myothercolumn SET NOT NULL; 残念ながら、この変更には5分以上の非常に長い時間がかかるため、中止しました。 このパフォーマンスコストが発生する原因は何か考えていますか?

2
MS SQL Serverの累積的な更新-ベストプラクティス
SQL Serverの累積的な更新の推奨されるベストプラクティスを理解しようとしています。 現在、「CUによって修正された問題が発生した問題でない限り、何もしない」という考えに基づいています。これは「壊れていない場合は修正しない」というアプローチで機能しますが、多くのCUにはパフォーマンスが強化されているので、それが本当に良いアイデアかどうか疑問に思っています。CUがリリースされてから1〜2か月後の定期メンテナンスサイクル中に適用されるパッチに、CUを追加することを検討しています。 他の人は何をしますか、そしてなぜですか? 以下の回答に影響する質問に対する更新として、2016年3月24日、MicrosoftのSQL Serverチームは、サービスモデルを更新すると発表しました。マイクロソフトは、すべてのユーザーが2016年1月以降にリリースされたすべてのCUをインストールすることを推奨しています。 CUの1月のリリース以降、これらの警告メッセージが更新されました。CUが利用可能になったときに、CUを継続的かつ事前にインストールすることをお勧めします。CUのインストールは、SP(サービスパック)がリリースされるときにインストールするのと同じレベルの信頼度で行う必要があります。これは、CUがSPのレベルで認定およびテストされているためです。また、Microsoft CSSデータは、顧客の問題のかなりの部分が、リリースされたCUで以前に対処されていることが多いが、積極的に適用されていないことを示しています。さらに、CUにはホットフィックス以上の付加価値が含まれています。これらには、サポート性、ロギング、信頼性の更新も含まれ、全体的なエクスペリエンスが向上します。 メッセージングとガイダンスの更新に加えて、CU取得モデルも更新しました。 取得の変更: もちろん、CUは従来から「Hotfix」サーバーで利用可能になっています(「QFE」または「Hotfix」に関連付けられた「警告言語」を伴う)。ここでの不整合は、CUが本当に単純なクイックホットフィックスではなくなったことです。含まれている更新プログラムは、今日の個人および完全なシステム統合レベルで十分にテストされています。 したがって、現在サービスパックで行われているのと同様に、メインストリームでサポートされているベースラインごとに最新のCU(2012 SP2 / SP3および2014 RTM / SP1今日)をmicrosoft.com/downloadsに配置しています。 さらに、取得と配布を容易にするために、すべてのCUをすぐにWindows Updateカタログにリリースして保守します。 暫定CUの「オンデマンド」修正のみがホットフィックスサーバーに配置されます。 摩擦を減らすために、microsoft.com / downloadsからCUをダウンロードする際に、電子メールとURLを提供/受信する必要はありません 現在のサービスパックと同様に、最新のCUをMicrosoft Updateのオプションの更新として提供することも評価しています
11 sql-server 

1
IDENTITY_INSERTは並行性にどのように影響しますか?
投稿に不具合があり、サポートが終了したサードパーティのSAPアドオンを使用してお客様を支援しようとしています。 特定の状況下では、投稿キューテーブルから投稿アーカイブテーブルへの不完全な投稿をアーカイブします。これらのアーカイブされた結果をキューに戻す必要があります。 キューIDはID列であり、同じにしたいと思います。 問題は、identity_insertをオン/挿入/ identity_insertオフにすると、キューエントリを作成し、ID列が自動的に生成されることを期待するプロセスとの同時実行性に関して何が期待できるでしょうか。 そのような振る舞いを実証するための最良の方法へのポインタも同様に大歓迎です。

3
エラー-関数 'innodb'はすでに存在します
MyISAMテーブルの一部をINNODBに変換することを検討しています。MySQL 5.6(apt-getが5.5からアップグレードされた)でUbuntu 14.04サーバーを実行し、4コア/ 8スレッドCPUで32G ram。最初に問題がありました... could not open single-table tablespace file .\mysql\innodb_index_stats.ibd after restart of MySQL そして Error: Table "mysql"."innodb_table_stats" not found. Rolandoの投稿されたアドバイスに従いましたが、DBがクラッシュしたり、巨大なerror.logを作成したりすることはありません。 (上記の問題はなくなり、主要なイベントについてのみ説明しています) 何かをINNODBに変換する前に、次のエラーについて心配しています。私が読んだものからFederatedは無視できます。下の2行目(この投稿の件名も)は私に関するものです 2014-05-19 01:50:57 30950 [Note] Plugin 'FEDERATED' is disabled. 2014-05-19 01:50:57 30950 [ERROR] Function 'innodb' already exists 2014-05-19 01:50:57 30950 [Warning] Couldn't load plugin named 'innodb' …
11 mysql  innodb 

1
トリガーを使用した同期
私は以前の議論と同様の要件を持っています: 単純な銀行スキーマの作成:残高を取引履歴と同期させるにはどうすればよいですか? トランザクションと組み合わせたトリガー 私は2つのテーブルを持っています、[Account].[Balance]そして[Transaction].[Amount]: CREATE TABLE Account ( AccountID INT , Balance MONEY ); CREATE TABLE Transaction ( TransactionID INT , AccountID INT , Amount MONEY ); [Transaction]テーブルに対して挿入、更新、または削除がある場合、に[Account].[Balance]基づいてを更新する必要があり[Amount]ます。 現在、私はこの仕事をするきっかけを持っています: ALTER TRIGGER [dbo].[TransactionChanged] ON [dbo].[Transaction] AFTER INSERT, UPDATE, DELETE AS BEGIN IF EXISTS (select 1 from [Deleted]) OR EXISTS (select 1 …

3
SQL Serverデータベースミラーリングは死ぬでしょう。今すぐ高可用性を保証するにはどうすればよいですか?
SQL Server のデータベースミラーリング機能はなくなります。 この機能は、Microsoft SQL Serverの将来のバージョンでは削除される予定です。新しい開発作業ではこの機能を使用せず、現在この機能を使用しているアプリケーションの変更を計画してください。代わりにAlwaysOn可用性グループを使用してください。 誰もが知っていますか?高可用性(およびクイックリカバリ)データベースのオプションは何ですか?

2
別のテーブルのデータで列を更新する
複雑な問題に取り組んでいますが、この問題を簡単に説明します。 2つのテーブルがあります A [ID, column1, column2, column3] B [ID, column1, column2, column3, column4] そして、私は3番目を更新したいです: C [ID, column1, column2,column3] このクエリを使用して別の3番目のテーブルを更新しています。 UPDATE C set column1=t.firstTab, column2=t.secondTab, column3=t.thirdTab from (select A.column1 as firstTab, B.column2 as secTab, (A.column1 + B.column2) thirdTab from A, B limit 1; ) as t ; 私は得ました: UPDATE 0 このクエリを実行すると: …

3
SELECT句とGROUP BY句の両方のSQL計算フィールド
多くの場合、MS SQL Serverデータベースのクエリで、次のような計算フィールドを作成する必要があります (CASE WHEN A.type = 'Workover' THEN 'Workover' ELSE (CASE WHEN substring(C.category, 2, 1) = 'D' THEN 'Drilling' WHEN substring(C.category, 2, 1) = 'C' THEN 'Completion' WHEN substring(C.category, 2, 1) = 'W' THEN 'Workover' ELSE 'Other' END) END) 次に、この計算フィールド(特に)で結果をグループ化する必要があります。したがって、SELECT句とGROUP BY句の両方で同じ計算を行っています。SQLサーバーは実際にこれらの計算を2回実行していますか、それとも1回だけ実行するのに十分スマートですか?
11 sql-server 

4
SQLサーバーのCPU使用率が高い-クエリが遅い[終了]
この質問が今後の訪問者を助けることはほとんどありません。これは、地理的に狭い地域、特定の瞬間、またはインターネットの世界中のオーディエンスには一般的に適用できない非常に狭い状況にのみ関連しています。この質問をより広く適用するためのヘルプについては、ヘルプセンターにアクセスしてください。 6年前休業。 MS SQL Serverは、CPUパワーの約95%を使用しています。 サーバー(ハードウェア)の再起動後、またはSQLサービスの再起動後、使用率は0%で、1〜3日かけてゆっくりと増加します。使用量によって異なります。 80%を超えると、すべてのクエリが非常に遅くなります。 私たちのウェブサイトは多くの大きなクエリを扱っているので、それらのいくつかは45-60秒かかります。再起動後(CPU使用率が80%未満)、同じクエリで11〜20秒かかります。 どうすれば修正できますか?アフィニティマスクでCPU使用率を調整できることをオンラインで読みましたが、アフィニティ設定が無効になっています。変更できません。これはプロセッサが1つしかないためですか? クエリ自体にはたくさんのトリックがありますが、私たちのWebサイトとサービスは非常に大きく、変更するのは多すぎます。 それらのほとんどはすでにかなり最適化されています。 2秒しかかかりませんが、SQLサービスを再開し続けることができません。ユーザーが電話をかけてメッセージを録音できるアラームサービスがあるため、選択したグループが呼び出され、録音されたメッセージが聞こえます。 このシステムは何百人もの捜索救助チームによって使用されており、SQLサービスがアラーム中に再起動した場合、システムは終了し、呼び出した人には通知されません。 あちこち検索してみましたが、「アフィニティマスク」以外は変更できません。 現在のクエリを終了せずに、CPUキャッシュをクリアする方法が必要です... SQL: Microsoft SQL Server 11.0.2100.60 OS: Windows Server 2012 x64 Processor: 2.30 GHz RAM: 4.00 GB

2
MySQLでNULL値を持つ列のインデックスを設計する方法は?
4,000万のエントリを持つデータベースがあり、次のWHERE句を使用してクエリを実行したい ... WHERE `POP1` IS NOT NULL && `VT`='ABC' && (`SOURCE`='HOME') && (`alt` RLIKE '^[AaCcGgTt]$') && (`ref` RLIKE '^[AaCcGgTt]$') && (`AA` RLIKE '^[AaCcGgTt]$') && (`ref` = `AA` || `alt` = `AA`) LIMIT 10 ; POP1NULLにすることもできる浮動列です。POP1 IS NOT NULLエントリの約50%を除外する必要があるため、最初にそれを配置しました。他のすべての用語は、数をごくわずかに減らします。 とりわけ、私は最初の列としてのpop1_vt_sourceインデックスvtが使用されている間、使用されていないように見えるインデックスを設計しました。EXPLAIN-出力: | id | select_type | table | type | possible_keys | …
11 mysql  index 

2
クラスター化インデックスを無効にすると、テーブルにアクセスできなくなるのはなぜですか?
インデックスが無効になると、定義はシステムカタログに残りますが、使用されなくなります。SQL Serverはインデックスを維持せず(テーブルのデータが変更されるため)、インデックスを使用してクエリを満たすことはできません。場合はクラスタ化インデックスが無効になっている、テーブル全体がアクセスできなくなります。 Bツリーを破棄してテーブルから直接データにアクセスできないのはなぜですか?(おそらくテーブルを行ごとにスキャンすることにより)データに完全にアクセス不能にするよりも適切でしょうか? それは純粋に理論的な質問です-私は実際にはそうしません。それはシナリオでも、やることでもありません。なぜそうなるのかを知りたいのですが、内部的な問題だと考えてください。

2
メタデータロックを待機しているため、テーブルを削除できません
1つのテーブルを削除しようとしていますが、それがハングアップしています。「SHOW PROCESSLIST」コマンドを見ると、「メタデータのロックを待っています」と表示されています。その特定のテーブルで操作を実行することもできません。誰かがそれを解決する方法を知っていますか?

4
2つの列が同じ値にならないようにできますか
このようなテーブルがあれば CREATE TABLE foo ( id INT NOT NULL AUTO_INCREMENT, aa INT NOT NULL, bb INT NOT NULL, PRIMARY KEY (id), UNIQUE KEY (aa, bb), CONSTRAINT aa_ref FOREIGN KEY (aa) REFERENCES bar (id), CONSTRAINT bb_ref FOREIGN KEY (bb) REFERENCES bar (id) ) aa != bbアプリケーションレベルのロジックを使用するか、トリガーをBEFORE INSERTで失敗させる以外に、それを確認する方法はありますか?
11 mysql-5.1 

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