データベース管理者

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

2
SQLクエリの最適化と実行プランの理解-リソース?
仕事でますます多くのSQLクエリ(主にOracle 11g、一部のSQL Server 2005-2008)を書いていることに気付き、残りのアナリストチームのためにかなり複雑なビューの作成を開始しました。 それらはほとんどすべて非常にうまく動作しますが、いくつかはそれほどうまくいきません。そう... クエリを調整する方法を教えてください。 実行計画を読んで行動することを学ぶ必要がありますか? そして... SQLクエリのチューニングについて1)一般に2)特にOracle 11gについて学習するためにどの本/ウェブサイトをお勧めできますか? ここには優れたDBAが何人かいますが、彼らは多すぎて、作成するすべてのクエリを調整するのに役立ちません。 私がAmazonでOracleで見つけたほとんどの本は、全体的なデータベースの最適化を対象としたものであるか、8〜10年前に書かれたものです。 アドバイスありがとうございます:)


3
中央データベースに関数を作成するか、各データベースで繰り返しますか?
私の開発者の1人が、VB.Net関数(LastIndexOf)のように機能し、それを公開したいSQL関数を作成しました。私の質問は、これを中央データベースに配置するのではなく、各ユーザーデータベースに配置する理由は何ですか? 開発者はそれを自分のマスターデータベースのsysスキーマに配置しようとしていたため、ユーザーデータベースからの呼び出しを修飾する必要はありませんでした...ため息 しかし、私はそれを(明らかにマスターデータベースではなく)各ユーザーデータベースに対して集中化するための有効な言い訳が何であるかがわかりませんでしたか?

3
このmysqlユーザーがパスワードでログインできないのはなぜですか?
phpmyadminで、パスワードとすべての権限を持つ「edward」というユーザーを作成しました。 しかし、phpmyadmin経由でログインしようとすると、「MySQLサーバーにログインできません」と表示されます。 コマンドライン(Windows 7)でログインしようとすると、次のいずれも許可されません。 しかし、パスワードなしでログインすると、次のようになります。 テーブルを2つだけ表示します。 パスワードが正しいことは確かです。複数のユーザーを作成しましたが、いくつ権限を与えても、すべてのユーザーはパスワードでログインできません。 このユーザーがパスワードのみでログインしてすべてのデータベースを表示できるようにするにはどうすればよいですか? 補遺: phpmyadminからのスクリーンショットは、「edward」が「root」と同じだけの権利を持っていることを示しています。

3
論理読み取りとスキャン数
SQL Server 2008で大きなテーブル(8M行)に対して小さなテーブル(1,000行)を結合しています。結合は大きなテーブルで非クラスター化カバリングインデックスを使用し、結合により3つのクエリプランが生成されます。私はどちらの計画がより良いかを理解しようとしていますが、この知識を一般化して、次回SQL I / O統計を調べるときに使用するヒューリスティックをよりよく理解できるようにしたいと考えています。 プラン#1はループ結合であり、次のような大きなテーブルの統計を出力します。 Scan count 2582, logical reads 35686, physical reads 1041, read-ahead reads 23052 プラン#2はマージ結合であり、次のような統計を出力します。 Scan count 1, logical reads 59034, physical reads 49, read-ahead reads 59004 プラン#3はハッシュ結合であり、次のような統計を出力します。 Scan count 3, logical reads 59011, physical reads 5, read-ahead reads 59010 カバリングインデックスはによって注文され(ID, Date)ます。クエリは、IDの約50%のデータを返し、各IDについて、最新の3か月のデータの連続したチャンクを返します。これは通常、各IDの約1/4または行です。クエリは、インデックスの合計行の約1/8を返します。言い換えると、クエリはまばらですが一貫してまばらです。 ディスクヘッドを2,500回(場合によっては1,041回)動かすのは、逐次ディスクスキャンよりもはるかにコストがかかるため、計画1はこのワークロードにとってはひどいものであると想定しています。また、#3と#2には類似した順次(したがってより効率的な)I / Oパターンがあると想定しています。 …

2
トランザクションログとミラーリング-可能な最も愚かな説明を探す
まず、トランザクションログの概念に苦労していることを認めなければなりません。つまり、データベースで発生するすべてのトランザクションのログであることは理解していますが、タスク内のコンテキストに適切に配置することに関しては、明らかに何かが欠けています。ですから、質問に答える人なら誰でも、トランザクションログの背後にある理論を自由に拡張してください。 主な質問は-SQL Server 2008と2 GBのデータベースがあり、ミラーリングが必要です(12 GBのトランザクションログがあります)。そのデータベースをミラーリングしていない場合は、シンプルモードに切り替えるか、バックアップ後にログを切り捨てることができると思います。しかし、この場合、トランザクションログを管理したい場合はどうすればよいですか?私が理解しているように、データベースを簡単にミラーリングしたい場合は(フルバックアップを実行するだけ)、トランザクションログ全体を保持する必要があります。 これを回避する方法はありますか?理想的には、毎回MDFとLDFの両方を1つのファイルに保存するバックアップが可能であり、バックアップが実行された後、データベースのトランザクションログ(LDF)が0に減少したことを望みます。このシナリオの問題は、増分バックアップです-最初のバックアップの場合切り捨てられたログでは、後でミラーリングを行う場合、2番目のバックアップが最初のバックアップを参照する必要があると思います(つまり、1つではなく多数のファイルを保持することで立ち往生します)。 だから-この問題について誰かが私を啓発できますか?私はここで多くの穴を埋めようとしていることと、提案された「ソリューション」が最良のものではない可能性があることを理解していますが、誰かがトランザクションログの正しい方向に押し出してくれれば、ミラーリングへの影響と最良の結果が得られることを心から感謝しますそれらの2つの実践。

2
SSMSソリューションとプロジェクトの代替案?
SQL Serverの公式ドキュメントによると、「ソリューション、プロジェクト、アイテム」の使用は推奨されていません。MSDNページの上部にある目立つ(やや不可解ですが)警告バナーは次のように述べています。 「この機能は、Microsoft SQL Serverの将来のバージョンで削除されます。この機能を新しい開発作業で使用することは避け、この機能を現在使用しているアプリケーションを変更することを計画してください。」 残念ながら、代替の保管/コンテナ戦略の提案はありません。では、データベースアプリケーションを構成するさまざまなスクリプト、クエリ、およびファイルを格納およびパッケージ化するための推奨される方法は何でしょうか。また、現在の作業でソリューションまたはプロジェクトフレームワークを使用しているかどうか、およびそれらを何に使用しているかを知りたいと思っています。 [注:この機能にVS2010を使用できることを理解していますが、SSMSベースのアプローチに興味があります(この質問への回答に示されている理由のため)]

5
LinuxからSQL-Serverへのスクリプト可能なコマンドラインアクセス[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 4年前休業。 LinuxクライアントからSQLサーバーに接続できる既製の1コマンドラインツールを知っている人はいますか? 任意のクエリを実行できるようにしたいのですが、ほとんどの場合、データベースダンプを取得してから復元したいと考えています。 自動ビルド環境に統合されるため、これはスクリプト可能でなければなりません。 1 参考:私の唯一の他の選択肢は、何かを書くことです。私はおそらくperlとDBIを使用します


1
ストレージの順序と結果の順序
これは、主キーで指定されたソート順から派生した質問ですが、ソートはSELECTで実行されます。 @Catcallは、ストレージの順序(クラスター化インデックス)と出力の順序についてこれを述べています。 多くの人々は、クラスター化インデックスが出力のソート順を保証すると信じています。しかし、それはそうではありません。ディスク上のストレージの順序を保証します。 たとえば、このブログ投稿をご覧ください。 Hugo Kornelisによるブログ投稿を読みましたが、インデックスがSQLサーバーが特定の順序でレコードを読み取ることを保証するものではないことを理解しています。しかし、自分のシナリオではこれを想定できないことを受け入れるのに苦労していますか? CREATE TABLE [dbo].[SensorValues]( [DeviceId] [int] NOT NULL, [SensorId] [int] NOT NULL, [SensorValue] [int] NOT NULL, [Date] [int] NOT NULL, CONSTRAINT [PK_SensorValues] PRIMARY KEY CLUSTERED ( [DeviceId] ASC, [SensorId] ASC, [Date] DESC ) WITH ( FILLFACTOR=75, DATA_COMPRESSION = PAGE, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, …

1
SQL Server 2005のページの平均余命が0(ゼロ)である理由
SQL Serverのページの平均寿命を知りたいと思っています。そこで、Performを使用してカウンターを確認します。値はゼロで、決して変更されません。バグがあるのではないかと思ったので、SQL Server DMVクエリを確認しました SELECT [object_name],[counter_name],[cntr_value] FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Manager%' AND [counter_name] = 'Page life expectancy' また、終日ゼロを返します。 これをより興味深いものにするために、平均で99〜100の「バッファーキャッシュヒット率」カウンターを確認しました。 では、「バッファキャッシュヒット率」が100の場合、ページの平均余命はどのようにゼロになるのでしょうか。 何が欠けていますか?常にゼロの場合、バッファキャッシュに何も残っていないことを意味します。バッファキャッシュヒット率が100の場合、これは正しくないように見えますか? 前もって感謝します

1
SQL Server 2000から2008へのトランザクションレプリケーション
トランザクションレプリケーションを使用してSQL Server 2008 R2データベースに複製しようとしている2つのSQL Server 2000サーバーにレガシーデータベースがあります。 2008サーバーは同じLAN内にないため、インターネット経由で複製しています。次のMohammedU(およびその他)の説明に従って、各サーバーが多少なりとも(レプリケーションに必要な)名前で他のサーバーに接続できるようにエイリアスを作成しました。http://social.msdn.microsoft.com/forums/en-US/ sqlreplication / thread / 9a8cf6b1-a449-4748-b3c2-1c13e2bfcc5b / 唯一の違いは、SS2000マシンにエイリアスを作成するために、Configuration Managerではなくクライアントネットワークユーティリティを使用したことです。これは正常に動作するようです。 両方のディストリビューターになるように、1つのSS2000サーバー(Distributorと呼びます)をセットアップしました。ディストリビューターでパブリケーションを正常に作成し、SS 2008サーバーへのプッシュサブスクリプションを使用してそれらをレプリケートしました。 これで、2番目のSS2000サーバーにパブリケーションを設定しました。これをパブリッシャーと呼びます。同じ方法でプッシュサブスクリプションを作成しました。これらのサブスクリプションは機能していません。 ディストリビューターのレプリケーションモニターで、パブリッシャーのパブリケーションのディストリビューションエージェントに次のエラーメッセージが表示されます。 Error message: The process could not connect to Subscriber 'SUBSCRIBER' Error details: Login failed for user 'SUBSCRIBER\Guest.' (Source: SUBSCRIBER (Data source); Error number: 18456) サブスクライバーでプルサブスクリプションを作成してみました。ウィザードによると、それらは正常に作成され、対応するディストリビューションエージェントはディストリビューターのレプリケーションモニターに正しく表示されましたが、レプリケーションは行われませんでした。エージェントは、スナップショットが利用可能であっても利用できなかったというメッセージを表示し続けました。 誰か助けてもらえますか?


1
再帰的なCTEパフォーマンス
再帰的なCTEパフォーマンスのヘルプが必要です。CTE以下では、階層データを再帰的にプルしようとしているため、実行速度が非常に遅くなっています。テーブルは大きく、すべてのルートIDに最大3つの再帰的なアイテムIDがあります。約200000以上のルートIDが存在する可能性があります。アンカーのすべてのrootidは再帰的にitemidになるため、再帰的なCTEは巨大なデータセットでは遅いことを知っています。 スキーマ: Create table RootItem (ItemId int primary key, RootIt int , insertdate datetime) 上記の表には100万行を超える行があります。 CTEクエリ: ; With rootcte as ( select itemid from RootItem where rootid is null union all select r.itemid as RootId , i.itemid from RootItem i join rootcte r on i.rootid = r.itemid ) テーブルスキーマを変更してheirarchyidを使用することはできません。whileループも試しましたが、それも遅いです。 このクエリを最適化できる他の方法はありますか? …

1
SQL Browserサービスが無効になるのはなぜですか?
私たちの製品をインストールするソフトウェアインストールパッケージ(InstallShield / InstallScriptを使用して作成された)に断続的な問題があります。インストールの処理中に、SQLブラウザーサービスを再起動します。ほとんどの場合、これは正常に機能します。しかし、時々-そして私はこれを予測どおりに再現する方法を考え出していない-サービスが再起動に失敗し、「サービス」マネージャーでサービスのステータスが「無効」に設定されていることがわかりました。 サービスが無効になる原因は何か、それを防ぐ方法はありますか?

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