データベース管理者

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

1
SQLiteの制限
シングルユーザー、組み込み、プロトタイプ指向のdbエンジンからsqliteデータベースをどこまで取得できますか?
22 sqlite 

1
postgresテーブルの各レコードに対してトリガーを実行する良い方法はありますか?
いくつかのテーブルのデザインを制御できないシステムがあり(Slony-Iを介して複製されます)、「シャドウテーブル」と呼ばれる一連のシステムがあり、複製されたテーブルから情報を抽出します。 、必要な処理済みフォームに保存し、無視したいレコードを削除します。 現在、新しいレプリカを設定した後、更新を実行し、値をそれ自体に設定して(たとえば、UPDATE tablename SET field=field)トリガーを強制的に実行しますが、一部のテーブルは数百万のレコードであり、成長し、30分かかることがあります。(そして、真空もあります)。 それをトリガーするより良い方法、または渡された入力またはNEW呼び出しコンテキストに依存する入力で機能するような関数を書く方法はありますか?1つが更新され、もう1つが更新されないことを何度も見てきたため、2つの異なる機能を保持することに消極的です。

4
「増分キーに基づいたクラスター化インデックスの作成を避ける」ことは、SQL Server 2000日からの神話ですか?
私たちのデータベースは多くのテーブルで構成されており、そのほとんどは整数の代理キーを主キーとして使用しています。これらの主キーの約半分はID列にあります。 データベース開発は、SQL Server 6.0の時代に始まりました。 これらのインデックス最適化のヒントにあるように、最初から続いているルールの1つは、増分キーに基づいてクラスター化インデックスを作成しないことです。 現在、SQL Server 2005とSQL Server 2008を使用して、状況が変わったという強い印象を持っています。一方、これらの主キー列は、テーブルのクラスター化インデックスの完全な最初の候補です。

2
クエリの種類ごとに個別のインデックスが必要ですか、それとも1つのマルチカラムインデックスが機能しますか?
私はこの質問に対する答えをすでにある程度知っていますが、私は常にトピックについて取り上げる必要があると感じています。 私の基本的な理解は、一般的に言って、特定の時点でクエリ/ソートを行う可能性のあるすべてのフィールドを含む単一のインデックスは有用ではない可能性が高いということです。誰かが考えたように、「まあ、すべてのものをインデックスに入れると、データベースはそれを使って必要なものを見つけることができます」、実際に実行されているクエリの実行計画を見たことがありません。 次のようなテーブルを想像してください。 id int pk/uid name varchar(50) customerId int (foreign key) dateCreated datetime およびフィールドを含む単一のインデックスが表示されるname場合がcustomerIdありdateCreatedます。 しかし、私の理解では、そのようなインデックスは、たとえば次のようなクエリでは使用されません。 SELECT [id], [name], [customerId], [dateCreated] FROM Representatives WHERE customerId=1 ORDER BY dateCreated このようなクエリの場合、より良いアイデアは、フィールドが「最初」であるフィールドcustomerIdとdateCreatedフィールドを含むインデックスになると思われますcustomerId。これにより、このクエリが必要なものを必要な順序ですばやく見つけることができるようにデータが編成されたインデックスが作成されます。 私が見るもう1つのことは、おそらく最初と同じくらい頻繁に、各フィールドの個々のインデックスです。そう、1それぞれにname、customerIdそしてdateCreatedフィールド。 最初の例とは異なり、このタイプの配置は、少なくとも部分的には役立つように思えます。クエリの実行プランは、少なくとものインデックスを使用customerIdしてレコードを選択しているが、dateCreatedフィールドのインデックスを使用してレコードをソートしていないことを示す場合があります。 テーブルの特定のセットに対する特定のクエリに対する具体的な答えは、通常、実行プランが実行することを示していることを確認することであり、そうでない場合はテーブルとクエリの詳細を取得することであるため、これは広範な質問であることを知っていますアカウント。また、クエリの特定のインデックスを維持するオーバーヘッドとは対照的に、クエリが実行される頻度に依存することも知っています。 しかし、私が求めているのはインデックスの一般的な「開始点」であり、頻繁にプルされる特定のクエリとWHERE句またはORDER BY句のフィールドに特定のインデックスを付けるという考えは意味がありますか?
22 sql-server  index 

3
Mnesia:利点と違い
主要なSQLデータベースの実装に対するMnesiaの利点は何ですか? データベースを使用して、パフォーマンスを著しく低下させることなく、非常に大量のデータを保持できますか?

4
テーブルの最大行数を1に制限する方法
SQL Serverデータベースに構成テーブルがあり、このテーブルには1行しかありません。将来の開発者がこれを理解できるように、複数行のデータが追加されないようにしたいと思います。以下のように、このためにトリガーを使用することを選択しました... ALTER TRIGGER OnlyOneConfigRow ON [dbo].[Configuration] INSTEAD OF INSERT AS BEGIN DECLARE @HasZeroRows BIT; SELECT @HasZeroRows = CASE WHEN COUNT (Id) = 0 THEN 1 ELSE 0 END FROM [dbo].[Configuration]; IF EXISTS(SELECT [Id] FROM inserted) AND @HasZeroRows = 0 BEGIN RAISERROR ('You should not add more than one row …

6
Oracleテーブルがロックされているかどうかを確認する方法は?
Oracle Enterprise 11gR2にインストールされているBIソフトウェアとリポジトリデータベースを使用しています。 これらのバッチレポートの一部は、まだロックされている可能性のあるデータベーステーブルにアクセスしようとします。Oracleテーブルがロックされているかどうかを確認するにはどうすればよいですか?分析の履歴詳細のように表示されるSQLステートメントはありますか?

3
国際データベースの照合を選択する方法は?
さまざまな言語(UTF-8を使用)でデータを格納するデータベースを設計しているので、クエリの結果を表示する最良の方法は、クエリ自体の実行中にユーザーの言語に従って並べることです(複数あるためそれを行う正しい方法)、次のように: SELECT a < b COLLATE "de_DE" FROM test1; これが国際データを処理する正しい方法であると仮定すると、データベース自体にとって最適な照合はどれですか?PostgreSQLのドキュメントによると: C照合とPOSIX照合はどちらも「従来のC」動作を指定します。この動作では、ASCII文字「A」から「Z」のみが文字として扱われ、ソートは文字コードバイト値によって厳密に行われます。 この場合、これが最良の選択だと思いますか、それとも間違っていますか? (ボーナス質問:クエリ自体で照合順序を選択するには遅すぎますか?)。

1
起動時の「ORA-03113:通信チャネルのファイルの終わり」
私はここ、オラクルのサポートに関する記事を読んでおり、過去3日間、他のどこでも見つけることができ、この問題をあきらめました... Oracleデータベースがハングしました。データベースのシャットダウンが数時間続いた後、終了しました。再起動しません。サーバーが再起動されました。Oracleが再起動されました。段階的に進む:起動時にnomountが機能し、データベースのマウントが機能し、データベースのオープンが変更されるとORA-03113が返されます。これはすべてローカルホスト上にあり、ネットワーク経由ではありません。マシンには実行中のファイアウォールはありません。 このORA-03113エラーを回避する方法はありますか?私は過去4.5時間インドでサポートを受けて電話をかけてきましたが、まだ誰も役に立たなかった。
22 oracle  startup 

1
CREATE INDEX…WITH ONLINE = ONが数分にわたってテーブルへのアクセスをブロックするのはなぜですか?
既存のテーブルがあります: CREATE TABLE dbo.ProofDetails ( ProofDetailsID int NOT NULL CONSTRAINT PK_ProofDetails PRIMARY KEY CLUSTERED IDENTITY(1,1) , ProofID int NULL , IDShownToUser int NULL , UserViewedDetails bit NOT NULL CONSTRAINT DF_ProofDetails_UserViewedDetails DEFAULT ((0)) ); このテーブルには150,000,000行があります。システムは24時間365日稼働しているため、定期的にメンテナンスウィンドウが発生することはありません。 テーブルにインデックスを追加したいのですが、SQL ServerのEnterpriseエディションでは、テーブルへの書き込みアクセスをブロックせずにインデックスを追加できるはずです。使用したコマンドは次のとおりです。 CREATE INDEX IX_ProofDetails_ProofID_Etc ON dbo.ProofDetails (ProofID, IDShownToUser) INCLUDE (UserViewedDetails) WITH (ONLINE=ON , ALLOW_ROW_LOCKS=ON , …

5
ビューを参照する外部キー(ベーステーブルだけでなく)を許可するDBMSはありますか?
Djangoモデリングの質問に触発されました:Djangoの複数の多対多リレーションを使用したデータベースモデリング。db-designは次のようなものです。 CREATE TABLE Book ( BookID INT NOT NULL , BookTitle VARCHAR(200) NOT NULL , PRIMARY KEY (BookID) ) ; CREATE TABLE Tag ( TagID INT NOT NULL , TagName VARCHAR(50) NOT NULL , PRIMARY KEY (TagID) ) ; CREATE TABLE BookTag ( BookID INT NOT NULL , TagID INT …

2
非dboスキーマと新しいデータベースをいつ使用するかの決定基準
私はほとんどがアプリケーション開発者ですが、現在のプロジェクト(MS SQL Server 2008の場合)のために、すべての事前データベース作業をしなければならないことに気付いています。最初の決定として、別のデータベースを使用して状態を分割するか、同じデータベース内の別のスキーマを使用するかを判断しようとしています。私はSQL Serverスキーマを少し読みましたが、オブジェクトドメイン(私は好きです)を分離する自然な方法のように思えますが、このパターンに隠れたコストがあるかどうかはわかりません。 これら2つのアプローチを選択する際に考慮すべき、より実用的なものは何ですか?dbo.mytableを支持しない場合、アーキテクチャにmyschema.mytable他の課題(または問題)を作成しますか? 補足として...ある時点で、これは実際の DBAに引き継がれ、保守/サポートされるので、私は彼らの生活を困難にしないように努めています。

8
非常に短縮されたテーブル名を使用する理由はありますか?
ベンダーのアプリケーションのデータベースセットアップを使用していますが、データベーステーブル名は恐ろしく読みにくく、どこに保存されているかに関するドキュメントはありません。プロプライエタリアプリでテーブル構造を難読化する理由はわかりますが、このアプリケーション(エンタープライズリソースプランニング)のセールスポイントの1つはカスタマイズ性でした。 テーブル名は、aptrx(買掛金勘定取引)およびapmaster_all(奇妙なことに、これはベンダーテーブルです)のようなものです。それは非常に複雑なデータベースなので、慣習に何らかのロジックがあるのか​​、それとも単に意図的にまたは他の方法で難読化されているのか疑問に思っていました。 私の知る限り、テーブル名の長さはパフォーマンスに顕著な影響を与えません、正しいですか?データベースは非常に複雑(数百のテーブル)なので、ソートは理にかなっていますが、AccountsPayableTransactionsがaptrxよりも好ましくない理由は想像できません。

4
SQLサーバージョブを実行する権限を付与する
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 MSSQLサーバー2005に、すべてのデータベースユーザーの実行を許可するジョブがあります。 ジョブの実際の作業への入力はデータベーステーブルから取得されるため、セキュリティについては心配していません。そのテーブルにレコードを追加せずにジョブを実行するだけでは何も実行されません。 仕事に公共の許可を与える方法を見つけることができません。 これを行う方法はありますか?この時点で考えることができる唯一のことは、ジョブを絶えず実行する(またはスケジュールどおりに実行する)ことです。存在するとすぐに行われますが、これは最適なソリューションではないようです。

1
特定の時間にログに表示されるFlushCacheメッセージ
最近、多くのデータベースパフォーマンスの問題が発生しており、その理由を理解できるかどうかを確認しようとしてきました。私たちにはDBA(私はソフトウェア開発者)がいないので、私はただそれを翼に乗せているようなもので、オンラインで見つけたものの多くは外国語のように読めます。 SQL Serverは毎朝再起動します。これが、稼働中にSQL Serverを操作できる唯一の方法だからです。毎朝午前5時ごろに、ログで2分ごとにこのメッセージを取得し始めていることに気付きました。 FlushCache:db 9:0の97168ミリ秒で7432の書き込みで11848 bufsをクリーンアップ(8139の新しいダーティbufsを回避) 最後の未解決のターゲット:4、avgWriteLatency 32 平均スループット:0.72 MB /秒、I / O飽和:11635、コンテキストスイッチ18849 数字はもちろん毎回異なりますが、サーバーを再起動するまで同じパターンで何度も同じメッセージが表示されます。私はこれをどのように解釈するかわからない、私はそれについてグーグルにしようとしてきたし、私が集めたのは、I / Oに何か問題があるかもしれないということであり、何かが予想以上に時間がかかっているということです。最近SSDの使用に切り替えたので、書き込みの問題になるとは思いませんでした。 誰もこれに光を当てることができますか?

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