データベース管理者

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

5
Oracle 12c Express Enterprise Manager Webページがロードされません
問題の概要 Oracle 12c EM Express Webインターフェースを参照すると、次のようなURLを使用するとページがタイムアウトします。 http(s):// hostname:5500 / em http(s)://hostname.domain:5500 / em IPアドレスまたはlocalhostを含むURLを使用すると、ページの読み込みは非常に遅くなります(最大5分)。 http(s):// ip-address / em http(s):// localhost / em ホスト名を使用すると、リスナーログにエラーが表示されます(これらの複数): 03-DEC-2015 11:25:33 * http * (ADDRESS=(PROTOCOL=tcps)(HOST=<ip address>%14)(PORT=52925)) * handoff * http * 12518 TNS-12518: TNS:listener could not hand off client connection TNS-12560: TNS:protocol adapter error IPアドレスまたはlocalhostを使用する場合、リスナーログにエラーは表示されません。 03-DEC-2015 …

1
UPDLOCKによりSELECTがハング(ロック)するのはなぜですか?
テーブル全体をロックするSQL SERVERにselectがあります。 セットアップスクリプトは次のとおりです(上書きしないようにしてください)。 USE [master] GO IF EXISTS(SELECT 1 FROM sys.databases d WHERE d.name = 'LockingTestDB') DROP DATABASE LockingTestDB GO CREATE DATABASE LockingTestDB GO USE [LockingTestDB] GO IF EXISTS(SELECT 1 FROM sys.tables t WHERE t.name = 'LockingTestTable') DROP TABLE LockingTestTable GO CREATE TABLE LockingTestTable ( Id int IDENTITY(1, 1), Name …

6
例で2NFと3NFを説明する
2番目の正規形(2NF)に問題があり、Googleを使用して解決することができませんでした。私は教師であり、生徒に間違ったものを教えたくないので、それは私を夢中にさせています。 5つのフィールドを持つテーブルを作成しましょう。 成績= {StudentName、SubjectCode、SubjectName、#Exam、Grade} 依存関係は次のとおりです。 StudentName、SubjectCode、#Exam-> Grade SubjectCode-> SubjectName SubjectName-> SubjectCode したがって、候補キー1は{StudentName、SubjectCode、#Exam}であり、候補キー2は{StudentName、SubjectName、#Exam}です。 プライム属性は{StudentName、SubjectCode、SubjectName、#Exam}であり、非プライム属性はGradeです 2番目の標準形式の定義によれば、非プライム属性は候補キーの一部に依存できません。唯一の非プライム属性(グレード)は候補キーの一部に依存しないため、この表は2NFにあるように見えます。 問題は、何かがおかしいと思うことです(そして、私は間違っているかもしれません)。被験者は自分のテーブルを持つべきだと思います。 成績= {生徒名、件名コード、#試験、成績} サブジェクト= {Subject Code、SubjectName} しかし、2NFはこれを生成しません。3NFは非プライム属性間の依存関係に関するものであるため、これも生成しません。しかし、冗長性がないため、これは正しい結果であるように思えます。 非プライム属性が「候補キーではない属性」として定義されている場合、2NFが望ましい結果を生成すると思います。しかし、私はこれを何度もチェックしており、非プライム属性は「候補キーに一致しない属性」として定義されています。 私は何を間違えていますか?

1
where句が `value()`でフィルタリングするときにセカンダリ選択インデックスが使用されないのはなぜですか?
セットアップ: create table dbo.T ( ID int identity primary key, XMLDoc xml not null ); insert into dbo.T(XMLDoc) select ( select N.Number for xml path(''), type ) from ( select top(10000) row_number() over(order by (select null)) as Number from sys.columns as c1, sys.columns as c2 ) as N; 各行のサンプルXML: <Number>314</Number> …

1
RESOURCE_SEMAPHOREおよびRESOURCE_SEMAPHORE_QUERY_COMPILEの待機タイプを解決する方法
以下の構成のサーバーでホストされている、サイズ300 GBのデータベースの1つからデータをヒット/フェッチする、実行速度の遅いSQLサーバークエリの根本原因を突き止めようとしています。 Windows Server 2003 R2、SP2、Enterprise Edition、16 GB RAM、12 CPU's 32ビット SQL Server 2005、SP4、Enterprise Edition、32ビット。 64ビットへのアップグレードについては既に1か月以上かかるとの情報を提供しています。 しかし、現在の問題では、メモリのプレッシャーを解決できるか、最終的にRAMを増やすという結論に達することができる場合、データを収集しようとしています。 完了したアクション:このデータベースでは、インデックスの再作成と統計の更新が適切です。 以下に示すように、過去5日間、ロード時間中に実行されたセマフォのwaittypeに気付きました。 以下のクエリの後のいくつかの情報:バッファのサイズ= 137272 SELECT SUM(virtual_memory_committed_kb) FROM sys.dm_os_memory_clerks WHERE type='MEMORYCLERK_SQLBUFFERPOOL' セマフォメモリ=以下のクエリごとに644024 SELECT SUM(total_memory_kb) FROM sys.dm_exec_query_resource_semaphores 以下はdm_exec_query_resource_semaphores、sys.dm_exec_query_memory_grantsDMV から収集された詳細情報です。 したがって、上記の情報が収集され、SP_Blitzデータごとにリソースセマフォが問題のようです。 リソースセマフォIDに割り当てられたメモリ 'target_memory_kb'は、使用可能な16 GB RAMと比較して低すぎますか。 注* 8時間の分析ごとに 'target_memory_kb'を実行すると、使用可能な16 GBと比較して常に1 GB未満になりますか? ここで問題になる可能性のあるものと解決方法は、提案してください ありがとう

1
SQL Serverのオプティマイザーは、結合されたテーブルの行数をどのように推定しますか?
AdventureWorks2012データベースでこのクエリを実行しています。 SELECT s.SalesOrderID, d.CarrierTrackingNumber, d.ProductID, d.OrderQty FROM Sales.SalesOrderHeader s JOIN Sales.SalesOrderDetail d ON s.SalesOrderID = d.SalesOrderID WHERE s.CustomerID = 11077 推定実行計画を見ると、次のことがわかります。 最初のインデックスシーク(右上)はIX_SalesOrderHeader_CustomerIDインデックスを使用し、リテラル11077で検索しています。推定推定値は2.6192行です。 を使用するDBCC SHOW_STATISTICS ('Sales.SalesOrderHeader', 'IX_SalesOrderHeader_CustomerID') WITH HISTOGRAMと、値11077が2つのサンプリングされたキー11019と11091の間にあることがわかります。 11019から11091までの個別の行の平均数は2.619718であり、2.61972に丸められます。これは、インデックスシークで表示される推定行の値です。 私が理解していない部分は、SalesOrderDetailテーブルに対するクラスター化インデックスシークの推定行数です。 私が実行した場合DBCC SHOW_STATISTICS ('Sales.SalesOrderDetail', 'PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID'): したがって、SalesOrderID(私が参加している)の密度は3.178134E-05です。これは、1 / 3.178134E-05(31465)がSalesOrderDetailテーブルの一意のSalesOrderID値の数に等しいことを意味します。 SalesOrderDetailに31465個の一意のSalesOrderIDがあり、均等に分布している場合、SalesOrderIDあたりの平均行数は121317(行の総数)を31465で割った値です。平均は3.85561です。 したがって、ループスルーの推定行数が2.61972で、平均が3.85561で返される場合、推定行数は2.61972 * 3.85561 = 10.10062になると思います。 ただし、推定行数は11.4867です。 2番目の推定値の私の理解は間違っていると思います。異なる数字はそれを示しているようです。私は何が欠けていますか?

2
SQL Serverインデックス更新のデッドロック
同時に実行するとデッドロックが発生する2つのクエリがあります。 クエリ1-インデックス(index1)に含まれる列を更新します。 update table1 set column1 = value1 where id = @Id table1でXロックを取得してから、index1でXロックを試行します。 クエリ2: select columnx, columny, etc from table1 where {some condition} index1でS-Lockを取得してから、table1でS-Lockを試行します。 同じクエリを維持しながらデッドロックを防ぐ方法はありますか?たとえば、更新前に更新トランザクションのインデックスでX-Lockを何らかの方法で取得して、テーブルとインデックスのアクセスが同じ順序であることを確認できますか?デッドロックを防ぐことができますか? 分離レベルは読み取りコミットです。インデックスの行ロックとページロックが有効になっています。同じレコードが両方のクエリに参加している可能性があります。パラメータが表示されないため、デッドロックグラフからはわかりません。 デッドロックグラフ

2
sys.allocation_unitsおよびsp_spaceusedのスペース使用量
DMVがページ数と行数に関する正確な情報を保持していないことは既知の事実です。ただし、統計を更新しても、なぜ更新されないのかわかりません。 私は監視ツールに取り組んでおり、各インデックスとデータのディスクサイズなどを知りたいと思っています。最終的には、適切なフィルファクターなどを見つけたいと思っています。 私の関数と古いsp_spaceusedで使用されるスペースは、スペース使用量で少し異なりますが、レコード数では異なりません。 私のセレクトに足りないものがありますか? これはsp_spaceusedです(その後、数値をMBに変換します)。 sp_spaceused 'tblBOrderRelationship' go select 318008/1024.00 AS reserved, 140208/1024.00 AS data, 177048/1024.00 AS index_size, 752/1024.00 AS unused しかし、以下のselect \ codeのコードを実行すると、わずかに異なる数字が表示されます。 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT schema_name(t.schema_id) as SchemaName, t.NAME AS TableName, t.type_desc, t.is_ms_shipped, t.is_published, t.lob_data_space_id, t.filestream_data_space_id, t.is_replicated, t.has_replication_filter, t.is_merge_published, t.is_sync_tran_subscribed, --t.is_filetable, i.name as indexName, …

1
「WHERE field IS NULL」でクエリにインデックスを付ける方法は?
多数の挿入を含むテーブルがあり、フィールド(uploaded_at)の1つをに設定していNULLます。次に、定期タスクがすべてのタプルを選択し、WHERE uploaded_at IS NULLそれらを処理して更新し、uploaded_at現在の日付に設定します。 テーブルにインデックスを付けるにはどうすればよいですか? 次のような部分インデックスを使用する必要があることを理解しています。 CREATE INDEX foo ON table (uploaded_at) WHERE uploaded_at IS NULL またはそのようなsmth。しかし、常にフィールドにインデックスを付けることが正しい場合、私は少し混乱していますNULL。または、bツリーインデックスを使用することが正しい場合。ハッシュはより良いアイデアのように見えますが、廃止されており、ストリーミングホットスタンバイレプリケーションを介してレプリケートされません。どんなアドバイスも大歓迎です。 私は次のインデックスで少し実験しました: "foo_part" btree (uploaded_at) WHERE uploaded_at IS NULL "foo_part_id" btree (id) WHERE uploaded_at IS NULL クエリプランナーは常にfoo_partインデックスを選択するようです。explain analyseまた、foo_partインデックスの結果が若干良くなります: Index Scan using foo_part on t1 (cost=0.28..297.25 rows=4433 width=16) (actual time=0.025..3.649 rows=4351 loops=1) Index Cond: (uploaded_at …

1
PostgreSQLは共有メモリについて文句を言っていますが、共有メモリは問題ないようです
私はPostgreSQLサーバー上で一種の集中的なスキーマのドロップと作成を行ってきましたが、今は文句を言います。 WARNING: out of shared memory ERROR: out of shared memory HINT: You might need to increase max_locks_per_transaction. しかし、PostgreSQLをで再起動しただけでは問題が残りますservice postgresql restart。max_locks_per_transactionは何も調整しないと思われます。 このエラーのトラブルシューティングリストが機能していないため、少し疎遠になっています。 詳細1409291350:一部の詳細が欠落していますが、コアSQLの結果は保持しています。 postgres=# SELECT version(); PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2, 64-bit そして: $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: …

1
Postgresでは、現在定義されているセーブポイントのリストを取得する方法は?
現在のトランザクション内に新しいセーブポイントを作成するpostgres SAVEPOINTを使用しており、接続で現在定義されているセーブポイントのリストを表示したいと思います。 より正確に言うと、どの名前が接続で「no such savepoint」エラーを引き起こさないかを確認したいと思います。

3
2つの類似したPostgresデータベースの違いを比較する
私は時折、公開されているデータセットをPostgres dBの形式でダウンロードします。これらのデータセットは、リポジトリホストによって時間の経過とともに更新/変更/拡張されます。 古いと新しいPostgresデータベースの違いを表示できるPostgresコマンドまたはツール(理想的にはFOSS)はありますか?(動作する前提は、エントリの95%が変更されておらず、テーブルと関係も変更されないことです)。

2
スタースキーマデータウェアハウスの動的フィールドのEAVの代替
APIリクエストログを保存するために、大きなデータウェアハウスで動的なフィールドと値をサポートする必要があります。私のユーザーケースは、すべてのAPIリクエストクエリ文字列を保存し、将来それらに対してクエリを実行できるようにすることです(したがって、単なるストレージではなく、だから私は彼らのためにブロブを使用することはできません) 例えば http://example.com/?action=test&foo=abc&bar=def... すべてのfield => valueマッピングを保存する必要があります。つまり(action => test), (foo => abc), (bar => def)、フィールドは非常に動的であるため、私が見つけた唯一の解決策はEntity-Attribute-Valueを使用することですが、人々は非常に悪いデザインだと言い続けています。 それで、上記の私のユースケースを考えてください、EAVに適した代替物は何でしょうか? KAVを使用した現在のスキーマ テーブルrequests (id, timestamp, uri) 例(1, 149382220, '/') テーブルparams (request_id, key, value) 例(1, 'action', 'test'), (1, 'foo', 'abc'), (1, 'bar', 'def') 助言がありますか? 更新:AWS RedShiftでウェアハウスを実行します

1
非クラスター化インデックスで異なる行を更新するときのデッドロック
idフィールドでクラスター化インデックスと非クラスター化インデックスを使用すると、ロックの動作が異なることに気付きながら、デッドロックの問題を解決しています。clustedインデックスまたはプライマリキーがidフィールドに適用されると、デッドロックの問題は解決されるようです。 異なる行に対して1つ以上の更新を実行する異なるトランザクションがあります。たとえば、トランザクションAはID = aの行のみを更新し、tx BはID = bの行のみを更新します。 そして、インデックスなしでは、更新はすべての行の更新ロックを取得し、必要に応じて排他ロックに変換し、最終的にデッドロックにつながることを理解しています。しかし、非クラスター化インデックスでは、デッドロックが依然として存在する理由を見つけることができません(ただし、ヒット率は低下しているようです) データ表: CREATE TABLE [dbo].[user]( [id] [int] IDENTITY(1,1) NOT NULL, [userName] [nvarchar](255) NULL, [name] [nvarchar](255) NULL, [phone] [nvarchar](255) NULL, [password] [nvarchar](255) NULL, [ip] [nvarchar](30) NULL, [email] [nvarchar](255) NULL, [pubDate] [datetime] NULL, [todoOrder] [text] NULL ) デッドロックトレース deadlock-list deadlock victim=process4152ca8 process-list process id=process4152ca8 taskpriority=0 …

2
スーパーユーザーにならずにpg_stat_activityで別のセッションのクエリを表示するにはどうすればよいですか?
Postgresql 9.2データベースがあります。このデータベースに2人のユーザーが作成されます。スーパーユーザーとして次のクエリを実行すると、すべてが表示されます。 select * from pg_stat_activity ただし、スーパーユーザーとして接続せずに同じ結果を達成することは可能ですか? スーパーユーザーが表示できる結果を得るには、どの特権/ロールを付与/作成する必要がありますか?

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