データベース管理者

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

2
インデックスはメモリを消費しますか?
SQL Serverでのメモリ使用量について学び始めました。質問SQL Server 2008 R2「ゴーストメモリ」への回答でクエリを使用する場合 、私は単一のデータベースがバッファプールの非常に大きな領域を占有していることを発見しました。さらに調べてみるsys.allocation_unitsとsys.indexes、とを使用して、データベースでインデックスが頻繁に使用されていることが原因であることを確認しました。ほとんどのインデックスはクラスター化されています。 別のデータベース開発者は、サーバーでメモリの問題が発生していると考えています。利用可能なメモリがないため、クエリが長く実行され始めています。 私の質問はここにあります-これらのインデックスの使用とバッファプール内でのそれらの存在は、他のプロセスで利用可能なメモリを奪いますか?

2
クエリがテーブルレベルのロックを待機しないようにする方法
お客様のデータベースを追加のサーバーに移動した後、問題が発生しました。これはサイトのパフォーマンスにプラスの影響を与えるはずでしたが、MyISAMのテーブルロックに問題があります。(MyISAMの代わりにInnoDBを使用することを聞いたことがありますが、近い将来エンジンを変更することはできません)。 モデレーターが記事サイトのコメントをアクティブ化するときに実行されるupdate-queryにそれを見つけることができます。これはプロセスです: update-queryが処理されます SET status = 1 WHERE id = 5(インデックスが設定されます) ページのキャッシュファイルが削除されます この時点で、ページ全体が遅くなります。データベース自体は数分間ビジーです。私はプロセスリストを数回フェッチし、さまざまな選択クエリの約60のエントリを確認しました。これらはすべて、テーブルレベルのロックを待機している状態でした。 1.テーブルに対するこの更新が、テーブルレベルのロックを待機するテーブルのarticle_commentsselect-statementsに影響を与える理由がわかりませんarticle。プロセスリストでは、待機中のほとんどすべてのクエリがこのテーブルからのものでした。selectよりもupdate / insertが優先され、これがそのような問題を引き起こす可能性があるという事実を読みましたが、記事テーブル自体はコメントがアクティブになっても更新されないので、selectは待つべきではありません。私はそれを誤解しましたか? 2.この動作を防止するため、または少なくともより良いバランスを得るために、InnoDBに変更する以外に何かありますか?データベースを新しいサーバーに移動する前にこの問題が発生しなかったという事実に非常に苛立ちました。いくつかの設定ミスがあると思いますが、特定する方法がわかりません。

5
列をコンマで分割するT SQLテーブル値関数
Microsoft SQL Server 2008でテーブル値関数を記述して、データベースのカンマ区切りの列を取得し、各値の個別の行を出力しました。 例:「one、two、three、four」は、次の値を含む列が1つだけの新しいテーブルを返します。 one two three four このコードはエラーが発生しやすいように見えますか?私がそれをテストするとき SELECT * FROM utvf_Split('one,two,three,four',',') 永久に実行され、何も返さない。MSSQLサーバーには組み込みの分割関数がないので(なぜ、なぜ、なぜ!?)、Webで見つけた同様の関数はすべて、完全にゴミ箱であるか、または私がやろうとしていることとは無関係であるため、これは特に失望します。 。 これが関数です: USE *myDBname* GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[utvf_SPlit] (@String VARCHAR(MAX), @delimiter CHAR) RETURNS @SplitValues TABLE ( Asset_ID VARCHAR(MAX) NOT NULL ) AS BEGIN DECLARE @FoundIndex INT DECLARE …

2
MySQLでのソートにインデックスが使用されているかどうかを確認するにはどうすればよいですか?
WHERE句で使用されているインデックスの最後の列である列を使用するORDER BY句を含むクエリがあります。 SELECT cols FROM tables WHERE col_1 = x AND col_2 = y AND col_3 = z ORDER BY col_4 インデックスは、列(col_1、col_2、col_3、col_4)にこの順序で作成されます。 クエリのプロファイルを作成すると、99%以上の時間を「結果の並べ替え」状態で費やしています。col_4は、違いがある場合はタイムスタンプ列です。ORDER BYは特定の状況でのみインデックスを使用できることを理解していますが、オプティマイザがいつ使用するかについては、まだ少し不思議です。
10 mysql  index  sorting 

3
Oracle:階層テーブルを照会するにはどうすればよいですか?
バックグラウンド これは、レポートに使用するいくつかのビューを作成するためのものです。 場所のテーブルがあり、キーフィールドは「場所」と「親」です。 これらの2つのフィールドが作成する構造は、レベルごとに、会社名->キャンパス名->建物名->フロア名->部屋名のラインに沿っています。この場合、会社名は変わりませんが、キャンパス名は変わりません。 ロケーションの構造は、通常、次のようになります。 +-----------+ | Org. Name | +-----+-----+ | +-----v-----+ +--------------------+|Campus Name|+---+--+-------------+ | +--+--------+ | | | | | | | | | | +--+-----+ +------+-+ +--+----+ +---+---+ +--+| BLDG-01|+--+ | BLDG-02| |BLDG-03| |Grounds| | +--------+ | +--------+ +-------+ +-------+ +-+------+ +-----+--+ |Floor-01| |Basement+-------+ +-+------+ +--------+ | …
10 oracle  query  view  hierarchy 

2
あるテーブルを別のテーブルの「エイリアス」または「シンボリックリンク」にすることはできますか?
同じ構造の2つのテーブルAとBがあります。特定のアプリケーションは、常に両方のテーブルに同じデータを書き込むように作成されています。 ドライブスペースを節約する可能性について同僚と話し合った後、mysqlまたはpostgresqlが別のテーブルの「エイリアス」または「シンボリックリンク」としてテーブルに作成できるかどうか疑問に思っています。 ソフトファイルのシンボリックリンクの動作と非常によく似た動作にしたい。シンボリックリンク自体またはそのターゲットのいずれかから読み取ると同じ出力が生成され、どちらかに書き込むとターゲットが更新されます。
10 mysql  postgresql 

2
連続処理中のインデックスの断片化
SQL Server 2005 900Mのレコードテーブルで約350Mのレコードを継続的に処理できる必要があります。処理するレコードを選択するために使用しているクエリは、処理中に著しく断片化され、インデックスを再構築するために処理を停止する必要があります。疑似データモデルとクエリ... /**************************************/ CREATE TABLE [Table] ( [PrimaryKeyId] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, [ForeignKeyId] [INT] NOT NULL, /* more columns ... */ [DataType] [CHAR](1) NOT NULL, [DataStatus] [DATETIME] NULL, [ProcessDate] [DATETIME] NOT NULL, [ProcessThreadId] VARCHAR (100) NULL ); CREATE NONCLUSTERED INDEX [Idx] ON [Table] ( [DataType], …

3
TSQLのパフォーマンス-値の最小値と最大値の間のJOIN
私が保存している2つのテーブルがあります。 IP範囲-国ルックアップテーブル 異なるIPからのリクエストのリスト IPはbigints として保存され、ルックアップのパフォーマンスが向上しました。 これはテーブル構造です: create table [dbo].[ip2country]( [begin_ip] [varchar](15) NOT NULL, [end_ip] [varchar](15) NOT NULL, [begin_num] [bigint] NOT NULL, [end_num] [bigint] NOT NULL, [IDCountry] [int] NULL, constraint [PK_ip2country] PRIMARY KEY CLUSTERED ( [begin_num] ASC, [end_num] ASC ) ) create table Request( Id int identity primary key, [Date] datetime, …

3
InnoDBエンジンで挿入遅延を使用し、挿入ステートメントの接続を減らす方法は?
多くのデータベース書き込み、約70%の挿入、30%の読み取りを含むアプリケーションに取り組んでいます。この比率には、1回の読み取りと1回の書き込みと見なす更新も含まれます。insertステートメントを使用して、複数のクライアントが以下のinsertステートメントを介してデータベースにデータを挿入します。 $mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)"); 問題は、insertステートメントがサーバーで最大 100%のCPU を使用するため、insert_delayまたはmysqli_multi_queryメカニズムのどちらを使用するかです。データベースでInnoDBエンジンを使用しているため、挿入の遅延は不可能です。サーバーへの挿入は〜36k /時間、99.89%の読み取りです。また、selectステートメントを使用して、単一のクエリでデータを7回取得しています。このクエリの実行には、サーバーで150秒かかります。このタスクにはどのようなテクニックやメカニズムを使用できますか?サーバーのメモリは2 GBですが、メモリを拡張する必要がありますか?この問題を見てください、どんな提案も私に感謝します。 テーブルの構造: +-----------------+--------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user …

2
複数列のPostgres全文検索、なぜ実行時ではなくインデックスで連結するのですか?
ここ数日、postgresで全文検索を行ったことがありますが、複数の列を検索するときのインデックス付けについて少し混乱しています。 postgresのドキュメントではts_vector、次のように、連結された列にインデックスを作成する方法について説明しています。 CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector('english', title || ' ' || body)); 私はそのように検索できます: ... WHERE (to_tsvector('english', title||' '||body) @@ to_tsquery('english', 'foo')) ただし、タイトルだけ、本文だけ、または両方を検索する場合は、3つの個別のインデックスが必要になります。そして、3番目の列に追加すると、6つのインデックスになる可能性があります。 私がドキュメントで見たことのない別の方法は、2つの列に別々にインデックスを付けてから、通常のWHERE...ORクエリを使用することです。 ... WHERE (to_tsvector('english', title) @@ to_tsquery('english','foo')) OR (to_tsvector('english', body) @@ to_tsquery('english','foo')) 100万行までの2つをベンチマークしても、基本的にパフォーマンスに違いはないようです。 だから私の質問は: 列を個別にインデックス付けするだけでなく、このようにインデックスを連結したいのはなぜですか?両方の長所と短所は何ですか? 私の推測では、事前に両方の列だけを検索したい場合(一度に1つずつではない)は、どちらが少ないメモリを使用するかを連結することで1つのインデックスしか必要としないでしょう。

2
SQL Server Management Studio 2008にテーマを適用する方法は?
たとえば、SSMS 2008のテキストエディターコンポーネントに「暗い」それらを適用することで成功した人はいますか? 2005年には、機能しなくなってアップグレードされていない古いトリックがありました。 http://winterdom.com/2007/10/colorschemesinsql2005managementstudio 私の目は本当に感謝します!乾杯。

2
CREATE TABLE AS SELECT中にMySQLがロックする
次の(ダミー)クエリを実行しています CREATE TABLE large_temp_table AS SELECT a.*, b.*, c.* FROM a LEFT JOIN b ON a.foo = b.foo LEFT JOIN c ON a.bar = c.bar クエリの実行に10分かかるとします。テーブルa、b、cの実行中に値を更新しようとすると、上記のクエリが最初に完了するまで待機します。このロックを回避したい(データの整合性は重要ではない)。どうすればそれを達成できますか? 使用:MySQL 5.1.41およびInnoDBテーブル ps SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 動作に変化はありません 更新 クエリが実行されている間、SHOW ENGINE INNODB STATUSの出力は次のようになります(ここでは目的のために非常に遅いクエリを作成しています)。 ===================================== 120323 15:26:29 INNODB MONITOR OUTPUT ===================================== Per second …
10 mysql  locking  ctas 

3
この完全外部結合が機能しないのはなぜですか?
以前は完全外部結合を使用して希望の結果を得ていましたが、単純な結合を実現できないため、概念を完全に理解できていない可能性があります。 それぞれ2つのフィールドを持つ2つのテーブル(t1とt2と呼びます)があります。 t1 Policy_Number Premium 101 15 102 7 103 10 108 25 111 3 t2 Policy_Number Loss 101 5 103 9 107 20 私がやろうとしていることは、両方のテーブルとPolicy_NumberからPremiumとSum of Lossesの合計を取得することです。私が使用しているコードは: select sum(premium) Prem_Sum, sum(Loss) Loss_Sum, t1.policynumber from t1 full outer join t2 on t1.policynumber = t2.policynumber group by t1.policynumber 上記のコードは正しい合計を返しますが、一致するpolicy_numberがないすべてのレコードを「NULL」policy_numberでグループ化します。 結果がこのように見えるようにしたい Policy_Number Prem_Sum …

2
100テラバイトの容量データベース-リソースと時間の見積もり
100TBのレポートデータベースセットアップの「エンベロープのバック」計算に取り組んでいます。私はここの専門家からの考えを探しています。提案された環境: ストレージ容量〜100TB テーブル〜200、サイズは1GB〜5TB。平均サイズは100 GB〜200 GB ETL-ジョブは、数千万行のテーブル間の結合を必要とする場合があり、結合キーの範囲は10バイトから500バイトです。このような結合は2〜5分以内に完了します ライブ選択-最初は、選択速度のみに関心があります。500選択/秒をサポートする必要があります。1秒あたりの更新数は比較的はるかに少なく、この演習では無視できます。 24時間365日の可用性が必要です。選択した呼び出しに対応するために、2つの独立したDBサーバーを使用できる必要があります(データが複製されます)。 質問: 現在、私はOracleを見ています。大規模なデータベースのための他の商用(または)オープンソースソリューションについて、どのように経験しましたか? どのハードウェアOSが最も効果的だと思いますか?Linux on Dellを計画しています。 NetAppなどのネットワークストレージは必須ですか?市販のディスクを使用する場合、どのような問題が予想されますか? ハードウェアとOSの準備ができたら、DB、ストレージなどのセットアップ、構成にどれくらいの時間を確保しますか。 観察した環境で最もよく機能したチーム構成はどれですか。つまり、そのようなセットアップを管理および操作するために必要なさまざまな管理者(OS管理者、Oracle DB管理者?)です。24時間年中無休の稼働時間を実現するために必要な数 DBライセンス、ネットワークストレージコストに関する任意の概算/範囲。 私はすべての環境の詳細を持っていないことを知っています。正確な詳細を探すのではなく、概算で十分です。一部の質問にはマネージャーが最もよく答える可能性がありますが、私は管理者の観点に興味があります。ご意見をお待ちしております。

3
この表に数値を挿入するときに、先頭のゼロをどのように保存しますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 8年前休業。 テーブルに2つのレコードを挿入しました。 create table num(id int) insert into num values(0023) insert into num values(23) select * from num クエリすると、すべてと表示され23ます。つまり、SQL Serverは先頭の0を無視します。その背後にあるメカニズムは何ですか?SQL Serverで、挿入時に値を返すにはどうすればよいですか(つまり0023、および23)?

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