データベース管理者

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

3
孤立したユーザー「guest」を修正しますか?
特別なguestユーザーが孤立している(ログインにリンクされていない)場合、何ができますか? 私のデータベースの1つ(SQL Server 2005)では、次のコマンドを実行すると、ゲストユーザーが孤立したユーザーとしてリストされます。 exec sp_change_users_login 'report' 結果: UserName UserSID guest 0x3C2E66759FFBC14F84127D6795C27FD3 その手順を使用してゲストユーザーを修正しようとすると、次のようになります。 exec sp_change_users_login 'update_one', 'guest', 'guest' この手順を終了しています。'guest'は、この手順でのログイン名パラメーターの禁止値です。 ユーザーを削除しようとすると、次のようになります。 ユーザー「guest」は削除できません。無効にすることしかできません。 select * from sys.database_principals where name = 'guest' 結果: name guest principal_id 2 type S type_desc SQL_USER default_schema_name guest create_date 11/13/98 2:58 AM modify_date 10/16/01 4:31 PM owning_principal_id NULL …

3
ascとdescの両方向にインデックスを作成する
過去数週間、私は古いFirebirdデータベースに対して激怒しています。このデータベースはさまざまな理由でひどいですが、私が気付いたことの1つは、すべてのテーブルのすべてのフィールドに2つのインデックスがあることです。それぞれに単一のセグメントがあり、1つはasc順番に、もう1つはdesc順番に。 同じインデックスセグメントを持つ2つのインデックスを有することに単一セグメントのインデックスのいずれかの利点があるが、1で-以外のすべてのテーブル内のすべてのフィールドのインデックスを持つのwtf'nessから、それは考えて私を得たdescと1でasc?何か得られることはありますか、または最新のDBMSは単純にascインデックスを使用し、最後から始めて、必要に応じて逆方向に動作しますか?
8 index  firebird 

2
一定数の行を返した後にクエリが一時停止する
最大41レコード(たとえば)ですばやく(数秒)実行されるビューがありますTOP 41が、44以上のレコードでは数分かかり、TOP 42またはで実行すると中間結果が表示されTOP 43ます。具体的には、数秒で最初の39件のレコードを返し、残りのレコードを返す前に約3分間停止します。このパターンは、TOP 44またはをクエリする場合も同じTOP 100です。 このビューは元々ベースビューから派生したもので、ベースに1つだけフィルターを追加します。以下のコードの最後のフィルターです。子ビューをベースからチェーンする場合でも、ベースからのコードをインラインで子ビューに書き込む場合でも、違いはないようです。ベースビューは、数秒で100レコードを返します。子ビューをベースの50倍ではなく、ベースと同じくらい速く実行できるようにしたいと考えています。誰かがこのような行動を見たことがありますか?原因または解決策について推測はありますか? この動作は、関連するクエリをテストしたところ、過去数時間一貫していますが、速度が低下し始める前に返される行数はわずかに増減しました。これは新しいものではありません。合計実行時間は許容範囲内(<2分)だったので、今それを調べていますが、少なくとも数か月間、関連するログファイルでこの一時停止が見られました。 ブロッキング クエリがブロックされたことはありません。また、データベースに他のアクティビティがない場合でも問題が発生します(sp_WhoIsActiveによって検証済み)。ベースビューにはNOLOCK、価値のあるもの全体が含まれます。 クエリ 以下は、簡略化のためにベースビューがインライン表示された、子ビューの縮小バージョンです。それはまだ約40レコードで実行時のジャンプを示しています。 SELECT TOP 100 PERCENT Map.SalesforceAccountID AS Id, CAST(C.CustomerID AS NVARCHAR(255)) AS Name, CASE WHEN C.StreetAddress = 'Unknown' THEN '' ELSE C.StreetAddress END AS BillingStreet, CASE WHEN C.City = 'Unknown' THEN '' ELSE SUBSTRING(C.City, 1, 40) END AS BillingCity, …


1
IOPS(1秒あたりのI / O)と、それがDB CRUD操作にどのように影響するかについて知りたい
InnoDBエンジンを実行するデータベース(MySQL)の専用サーバーを取得したい。InnoDBの容量には、IOPSを定義できるこのオプションがあります。100 IOPSに対応するSATA 72K-RPM HDDがあるとします。それは私のDBが1秒あたり100の同時SQLクエリしか実行できないということですか、それとも1秒で100回の単一の読み取りまたは書き込みを意味するのですか?このようなハードウェアでDBが起動される毎秒3000クエリをどのように処理できますか?少し混乱しているので説明してください。専用サーバーで200以上のクエリを実行したい。

2
可用性グループはトランザクションレプリケーションを置き換えることができますか?
SQL Server 2012の新機能と、それが現在の状況にどのように役立つかを検討してきました。 現在、SQL Server 2008 R2を使用しており、トランザクションレプリケーションを介して2つのOLTPサーバーのデータベースを1つのレポートサーバーに複製します。次に、これらの複製されたDBをレポートに使用します。 SQL Server 2012と可用性グループでこれを置き換えることができるかどうかに興味があります。トランザクションレプリケーションの代わりに、新しい可用性グループを使用して、2つのOLTPサーバーのデータベースをレポートサーバーにミラーリングします。読み取り専用レプリカにアクセスします。 これがうまく機能するか、それともまったく機能しないかはわかりません。 レプリケーション(VSDBCMD.exeの使用)で問題が発生するため、レプリケーションを回避します。大規模なDBでのレプリケーションの再初期化の遅延を回避したいのですが。 誰か良い例や経験がありますか?以前のバージョンでの通常のミラーリングのように、複数のサーバーから単一のサーバーに読み取り可能なレプリカでミラーリングすることは可能ですか? これはもともとここで尋ねられました:https : //stackoverflow.com/questions/10415225/mirroring-and-availability-groups-in-sql2012申し訳ありませんが、まだ質問を移行することはできません。


2
1つのテーブルに2つの自動インクリメンタル列を設定するにはどうすればよいですか?
会社の請求書に関する情報を含むMySQLテーブルがあります。ただし、この会社には2つの支店があり、それぞれに固有の請求シーケンスがあります。いわば「セリエA」と「セリエB」。ただし、これは1つの会社であり、2つの請求書テーブルを作成したくありません。むしろ、1つのテーブルに2つの異なる自動インクリメントを設定したいのです。これは技術的に不可能であることはわかっていますが、これは他の人が以前に取り組んだ問題だと思うので、この問題の既知の「解決策」があるかどうか知りたいですか? 私が今行っているのは、請求書番号としてプライマリキーを使用すること(これは理想的です)ではなく、手動でインクリメントされる請求書IDを持つセカンダリ列を使用することです(まあ、PHPスクリプトを使用しますが、それでも自動ではありません) )、その特定のシリーズの最新の請求書を確認する。 これは私の現在の設定です: CREATE TABLE `invoices` ( `id` mediumint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, `invoicenumber` mediumint unsigned NOT NULL, `branch` enum('A','B') NOT NULL, `date` date NOT NULL, `client` varchar(100) NOT NULL ) COMMENT='' ENGINE='InnoDB'; 最新の請求書を確認するには、次のコマンドを実行します。 SELECT MAX(invoicenumber+1) AS new_invoice_number FROM invoices WHERE branch = 'A'

3
ユーザー定義の集計関数を作成するにはどうすればよいですか?
MySQLが提供していない集約関数が必要です。 MySQLのSQLフレーバー(つまり、Cではない)にしたいのですが。 どうすればよいですか?私が行き詰まっているのは、集約関数を作成することです- ドキュメントは、これがどのように行われるかについて言及していないようです。 product関数の望ましい使用法の例: mysql> select product(col) as a from `table`; +------+ | a | +------+ | 144 | +------+ 1 row in set (0.00 sec) mysql> select col, product(col) as a from `table` group by col; +-----+------+ | col | a | +-----+------+ | 6 | 36 | …

1
DB2で正確に何がバインドされていますか?
私は最近、Java開発者から私たちの実際のDBAに乗り換えました。私は、いわば、DBAになることについてロープを学んでいます(実際、これは私たちの会社にとっては新しいポジションの1つです)。 コマンドを実行するスクリプトをいくつか見ましたDB2 BIND bind_file other_parameters。 これらが何をするのか私は困惑しています。私は他のDBAに尋ねましたが、彼らはそれを理にかなった方法で私に説明することができませんでした。私が見てきましたBINDコマンドのIBMのインフォメーション・センターが、それはどちらか私には明確ではありませんでした。 REORGSを実行し、STATSを実行し、パフォーマンスを支援するために定期的にデータベースでBINDを再実行することになっているため、バインドが何らかの方法で重要であることを知っています。 私はまだn00bのDBAなので、誰かが「ダミーのバインドとは何か」を提供できるかどうか疑問に思っていました。説明? 編集:以下の回答に対する版で、私は最近、次のdeveloperworksの記事に出くわしました:「DB2パッケージ:概念、例、および一般的な問題:DB2システムおよびユーザーアプリケーションパッケージについて」。非常に役立ちます。特にシステムパッケージの場合、これは主に実行されていたものです。 20130905編集:DB2 DBAのEmber Crooksによるこのブログエントリは、バインディングとその意味に関して優れています。彼女はまた、パッケージが見つからないこと、バインドのCLIPKG番号をいつ上げるか、およびそれが何を意味するかについての以前のエントリーを書きました。これらの記事は非常によく説明されています。基本的に、「DB2 Binding and Packages for Dummies」が存在する場合は、そのようなものを読むのと同じです。
8 db2 

6
この状況に最適なデータベース設計は何ですか?
私は自分の会社のビジネスアプリケーションの構築に取り組んでおり、特定の状況に最適なデータベース設計を選択するのに苦労しています。次のエンティティがあるとします。 承認 Id 状態 ... ApprovalComment Id ApprovalId コメント 注文 Id ... 請求書 Id ... 明らかに、複数のタイプの承認と、承認を必要とする複数のオブジェクトが存在する可能性があります。テーブルを設計するための次のオプションのうち、最も適切なものは何ですか。 オプション1 null外部キーを持つ1つの承認テーブルがあります。 承認 ID PK 状態 OrderId FK NULL InvoiceId FK NULL ApprovalComments ID PK ApprovalId FK コメント この場合、承認が必要なすべてのオブジェクトに列を追加する必要があります オプション2 共通のフィールドを持つ親の承認テーブルと、承認が必要な各オブジェクトの子テーブルを用意します。 承認 ID PK 状態 ApprovalComments ID PK ApprovalId FK コメント OrderApprovals ApprovalId PK …


2
ユニオンビューをより効率的に実行するにはどうすればよいですか?
私はパフォーマンスの理由でアクティブテーブルとアーカイブテーブルに分割し、直接フィールドマッピングを使用して、アーカイブプロセスを毎晩実行する大きなテーブル(数千から数億レコード)を持っています。 コード内のいくつかの場所で、アクティブテーブルとアーカイブテーブルを結合するクエリを実行する必要があります。ほぼ常に1つ以上のフィールド(両方のテーブルにインデックスを配置している)によってフィルター処理されます。便宜上、次のようなビューがあると理にかなっています。 create view vMyTable_Combined as select * from MyTable_Active union all select * from MyTable_Archive しかし、次のようなクエリを実行すると select * from vMyTable_Combined where IndexedField = @val でフィルタリングする前に、ActiveとStoreのすべてに対して結合を行う@valため、パフォーマンスが低下します。 ユニオン@valを作成する前に、ユニオンビューの2つのサブクエリを各フィルターで作成する賢い方法はありますか? それとも、私が目指していることを達成するために提案する他のアプローチがあるかもしれません。つまり、インデックス付きフィールドによってフィルター処理されたユニオンレコードセットを取得する簡単で効率的な方法ですか。 編集:ここに実行計画があります(そして実際のテーブル名がここに表示されます): 奇妙なことに、アクティブテーブルは実際には正しいインデックス(およびRID検索?)を使用していますが、アーカイブテーブルはテーブルスキャンを実行しています!

3
全文検索クエリでのORDER BYの最適化
entities1500万レコードまでの大きなテーブルがあります。の「ホッケー」に一致する上位5行を見つけたいname。 に全文索引がありますname。これは次のように使用されます。gin_ix_entity_full_text_search_name クエリ: SELECT "entities".*, ts_rank(to_tsvector('english', "entities"."name"::text), to_tsquery('english', 'hockey'::text)) AS "rank0.48661998202865475" FROM "entities" WHERE "entities"."place" = 'f' AND (to_tsvector('english', "entities"."name"::text) @@ to_tsquery('english', 'hockey'::text)) ORDER BY "rank0.48661998202865475" DESC LIMIT 5 期間25,623ミリ秒 計画を説明する 1制限(コスト= 12666.89..12666.89行= 5幅= 3116) 2->ソート(コスト= 12666.89..12670.18行= 6571幅= 3116) 3ソートキー:(ts_rank(to_tsvector( 'english' :: regconfig、(name):: text)、 '' 'hockey' '' :: tsquery)) 4->エンティティに対するビットマップヒープスキャン(コスト= …

2
スナップショットアイソレーションを使用すると、SQL Serverデータベースの書き込みが遅くなりますか?
システムで多くのデッドロックが発生しています。 それらを修正するためにスナップショットアイソレーションを使用したいのですが、私のDBAはそれについて予約しています。 彼の懸念の1つは、スナップショット分離が書き込み速度を低下させることです。これは、キャッシュに書き込んでからTempDb(行バージョン)に書き込む必要があり、呼び出し元に戻ることができるためです。 「通常の」書き込みは、キャッシュに書き込むだけで実行できます。 これは行のバージョン管理のしくみですか?それともそれよりも複雑ですか?それはどういうわけかこれらを並行して行いますか? それともスナップショットアイソレーションでは書き込みが遅くなりますか?

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