データベース管理者

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

3
BULK INSERTステートメントのパフォーマンスをどのように調査しますか?
私は主にEntity Framework ORMを使用する.NET開発者です。ただし、ORMの使用に失敗したくないので、データレイヤー(データベース)内で何が起こるかを理解しようとしています。基本的に、開発中にプロファイラを起動し、クエリの観点からコードの一部が生成するものを確認します。 非常に複雑なもの(ORMが注意深く書かれていなければ、かなり単純なLINQステートメントからでもひどいクエリを生成する可能性があります)や重いもの(持続時間、CPU、ページの読み取り)を見つけた場合は、それをSSMSで受け取り、その実行計画を確認します。 私のデータベースの知識レベルでは問題なく動作します。ただし、BULK INSERTはSHOWPLANを生成しないように見えるため、特別な生物のようです。 非常に単純な例を示します。 テーブル定義 CREATE TABLE dbo.ImportingSystemFileLoadInfo ( ImportingSystemFileLoadInfoId INT NOT NULL IDENTITY(1, 1) CONSTRAINT PK_ImportingSystemFileLoadInfo PRIMARY KEY CLUSTERED, EnvironmentId INT NOT NULL CONSTRAINT FK_ImportingSystemFileLoadInfo REFERENCES dbo.Environment, ImportingSystemId INT NOT NULL CONSTRAINT FK_ImportingSystemFileLoadInfo_ImportingSystem REFERENCES dbo.ImportingSystem, FileName NVARCHAR(64) NOT NULL, FileImportTime DATETIME2 NOT NULL, CONSTRAINT UQ_ImportingSystemImportInfo_EnvXIs_TableName UNIQUE …

2
ウィンドウ関数を使用して、パーティション内の最初の非null値を繰り越します
訪問を記録するテーブルを考えます create table visits ( person varchar(10), ts timestamp, somevalue varchar(10) ) このサンプルデータを検討してください(カウンターとして簡略化されたタイムスタンプ) ts| person | somevalue ------------------------- 1 | bob |null 2 | bob |null 3 | jim |null 4 | bob | A 5 | bob | null 6 | bob | B 7 | jim | X …

1
ストアドプロシージャの結果をテーブル変数に挿入する
テーブル変数に値を格納するストアドプロシージャがあります。これらの値を選択し、プロシージャが呼び出されたときにそれらを返します。 これらの戻り値を別のテーブル変数に設定しようとしていますが、わかりません。 ストアドプロシージャ ALTER PROCEDURE [dbo].[GetOrSetDomainId] @DomainName varchar(50), @DomainUrl varchar(50) AS BEGIN DECLARE @DomainId bigint; DECLARE @NumberOfRwos bigint; DECLARE @DomainHistory TABLE ( DomainId bigint, HasHistory bit, ServerOnline bit, DatabaseOnline bit, ServerPerformance bigint, DatabasePerformance bigint, SoldTickets bigint ) SELECT @NumberOfRwos = COUNT(Id) FROM DomainData WHERE DomainName = @DomainName OR DomainUrl = …

1
デッドロックレポートの「ロックは待機しますがギャップ待機はしません」の意味
locks rec but not gap waitingTRANSACTION(1)の意味について、どちらが正しいですか? 既にギャップロックが付与されており、クラスター化インデックスXロックを待機していますか? クラスター化されたインデックスXロックを既に付与し、ギャップロックを待機していますか? Transaction(1)には31行あります。それらの行の意味は何ですか?これはギャップロックを表しますか? 0: len 4; hex 800c20d6; asc ;; .... 29: SQL NULL; 30: SQL NULL; 最新の検出されたデッドロックレポート LATEST DETECTED DEADLOCK ------------------------ 2015-09-25 15:27:24 1b8084000 *** (1) TRANSACTION: TRANSACTION 5226928, ACTIVE 0 sec fetching rows mysql tables in use 1, locked 1 LOCK WAIT …
12 mysql  deadlock 


1
最後のいくつかのinnodbデッドロックを表示する
mysql / innodbで最新のデッドロックを表示できることがわかりましたが、過去のデッドロックを表示する方法はありますか?デッドロックには2つの問題があります。1つは重要で、もう1つは重要ではありません。重要性の低いデッドロックは1日に数回発生するため、「最新の」デッドロックになります。


1
多くのINSERTとbyteaの更新のためにPostgreSQLを最適化します
私たちが持っているもの(ソフトウェア): 基本構成のPostrgeSQL 9.3(変更なしpostgresql.conf) Windows 7 64ビット ハードウェア: インテルCore i7-3770 3.9 Ghz 32 Gb RAM WDC WD10EZRX-00L4HBAtaドライブ(1000Gb、SATA III) したがって、DB aproxにロードする必要があります。bytea列を含む100.000.000行、およびより単純な500.000.000行(LOBなし)。1つ目のテーブルには2つのインデックス(長さ13、19)があり、2つ目のテーブルには2 つのインデックス(長さ18、10)があります。各テーブルのID生成のシーケンスもあります。varcharvarchar 現在、これらの操作は、JDBCバッチサイズ50と並行して8つの接続で実行されています。次の図は、システム負荷を示しています。これはpostgresqlプロセスの負荷がゼロです。24時間のロード後、10.000.000行しかロードしていません。これは非常に遅い結果です。 以下のPostrgreSQL目的で、構成の調整について支援を求めています。 1)この量のデータを超高速でロードする場合、これは1回のみの操作であるため、一時的な構成になる可能性があります。 2)結合やソートを行わずに、インデックスによってこれら2つのテーブルに適度な数のSELECTを実行する本番モードの場合。

2
1つのテーブルに存在しない行を含む行を表示するSQL結合クエリ
私は従業員の時間記録についていくつかのレポートを作成しようとしています。 この質問に特化した2つの表があります。従業員はMembersテーブルに一覧表示され、毎日、彼らが実行した作業の時間エントリを入力し、Time_Entryテーブルに保存されます。 SQL Fiddleでの設定例:http ://sqlfiddle.com/#!3/ e3806/7 私は行くよ最終結果は番組表であるALLMembers列リストで、その後は他の列に照会した日のために彼らの合計時間が表示されます。 問題はTime_Entry、特定のメンバーのテーブルに行がない場合、そのメンバーの行があることです。私はいくつかの異なる結合タイプ(左、右、内部、外部、完全外部など)を試しましたが、(SQL Fiddleの最後の例に基づいて)希望どおりの結果が得られないようです。 /*** Desired End Result ***/ Member_ID | COUNTTime_Entry | TIMEENTRYDATE | SUMHOURS_ACTUAL | SUMHOURS_BILL ADavis | 0 | 11-10-2013 | 0 | 0 BTronton | 0 | 11-10-2013 | 0 | 0 CJones | 0 | 11-10-2013 | 0 | 0 …

8
特定の列名を持つデータベース内のすべてのテーブルを検索するクエリを作成する方法
約100のテーブルを持つデータベースがあり、2つのテーブルから特定のデータを取得するために結合クエリを作成する必要があります。私はどちらかを知っていますが、もう一方は知りません。基本的に私は次のようなものが必要です: select <tables> from <database> where exists table.column name; これどうやってするの?
12 metadata 

4
通常のループの代わりに明示的なカーソルを使用するのはなぜですか?
私は1年間(Oracle dbの場合)基本的なWebアプリを作成してきましたが、関数はかなりシンプルなので、ほとんどの人は通常のFORループを使用してデータを取得します。 for i in (select * from STUDENTS) loop htp.prn(i.student_last_name || ', ' || i.student_first_name || ' ' || i.student_dob); end loop; しかし、カーソルは物事を行う「正しい」方法のようです。カーソルとは何か、さまざまな方法でループする方法については多くの情報を見つけることができますが、通常のFORループでそれらを使用する理由はわかりません。手順の必要性に依存していますか?知っておくべき固有の利点はありますか?
12 oracle  plsql 

3
インデックスの最大行サイズエラー
array列に上限はありますか? 配列フィールドに挿入すると、このエラーが発生します- PG::Error: ERROR: index row size 3480 exceeds maximum 2712 for index "ix_data" これが私のテーブル定義です- create table test_array(id varchar(50), data text[]); ALTER TABLE test_array ADD PRIMARY KEY (id); CREATE INDEX ix_data ON test_array USING GIN (data); 配列フィールドを検索しているので、配列フィールドにインデックスが必要です。

2
dbをコピーして名前を変更して、両方のコピーを添付できるようにします
サーバーに「mysite_db」というデータベースがあり、ローカルマシンに「mysite_db」でもあるコピーを作成しました。(ローカルマシンの)dbを、このdb名が既にあるサーバーに接続したいと思います。つまり、ローカルデータベースの名前を変更する必要があります(物理ファイルも変更する必要があると思います)。私はそれをする方法で迷っています。案内してもらえますか? 私の目標は、サーバーに2つのデータベースをロードすることです。例: 'mysite_db'と 'myNewSite_db'


1
MySQLのFULLTEXTインデックスでLIKEがMATCH…AGAINSTより4倍以上速いのはなぜですか?
私はこれを取得していません。 これらのインデックスを持つテーブルがあります PRIMARY post_id INDEX topic_id FULLTEXT post_text テーブルには(のみ)346 000行があります。2つのクエリを実行しようとしています。 SELECT post_id FROM phpbb_posts WHERE topic_id = 144017 AND post_id != 155352 AND MATCH(post_text) AGAINST('http://rapidshare.com/files/5494794/photo.rar') 4.05秒かかります SELECT post_id FROM phpbb_posts WHERE topic_id=144017 AND post_id != 155352 AND post_text LIKE ('%http://rapidshare.com/files/5494794/photo.rar%') 0.027秒かかります。 EXPLAINは、唯一の違いがpossible_keysにあることを示しています(fulltextpost_textが含まれていますが、含まれてLIKEいません) それは本当に奇妙です。 この背後にあるものは何ですか?バックグラウンドで何が起こっていますか?LIKEインデックスを使用していない場合はどのように高速になり、インデックスを使用している場合はFULLTEXTが非常に遅くなりますか? アップデート1: 実際には約0.5秒かかりますが、テーブルがロックされた可能性がありますが、プロファイリングをオンにすると、FULLTEXT INITIALIZATIONに0.2秒かかったことが示されます。調子はどう? 1 LIKE秒あたり10倍、フルテキストは2倍でテーブルをクエリできます UPDATE2: …

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