データベース管理者

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

3
SAN環境でSQLインデックスを最適化することに利点はありますか?
SQLサーバーはSAN上にあります。多数のOLTPデータベースが含まれており、一部には1m以上のレコードを含むいくつかのテーブルがあります。 私たちは、実行されているオラHallengrenの索引メンテナンススクリプトを毎週、そしてそれは、数時間ごとに実行されます。断片化のしきい値に基づいて、スクリプトはインデックスを再編成または再インデックス化します。インデックスの再作成中にログファイルが膨大になり、ログ配布中に帯域幅が過剰に消費されることが確認されています。 次に、ブレント・オザールからの記事があります。彼はSQLインデックスについて心配するのをやめると言っています。 ハードドライブは、同時にドライブリクエストを行っている他のサーバーと共有されるため、ドライブは常にデータを取得するためにあらゆる場所でジャンプします。インデックスの最適化は、無意味な忙しい作業です。 この質問をググリングすると、さまざまな意見につながりますが、ほとんどが短すぎるか弱すぎると思われる議論でサポートされています。暫定的な計画では、メンテナンススクリプトの断片化のしきい値を調整して、インデックスの再作成よりもはるかに頻繁に再編成するようにします。 最終的な判定は何ですか?毎週のメンテナンスジョブの実行に伴う負担を考慮して、SANでSQLインデックスを最適化することは価値がありますか?

3
SQL Server LocalDBインスタンス。バックアップの復元エラー(MasterDBPathは利用できません)
SQL Server 2012ローカルDBがインストールされており、(localdb)\ v11.0を介して接続しています。 バックアップファイルを復元しようとすると、次のメッセージが表示されます。 TITLE:Microsoft SQL Server Management Studio プロパティMasterDBPathは、情報 'Microsoft.SqlServer.Management.Smo.Information'では使用できません。このプロパティは、このオブジェクトには存在しないか、不十分なアクセス権のために取得できない可能性があります。(Microsoft.SqlServer.Smo) ヘルプが必要な場合は、http://go.microsoft.com/fwlink?ProdName = Microsoft + SQL + Server&ProdVer = 11.0.2100.60 +((SQL11_RTM).120210-1846 +)&EvtSrc = Microsoft.SqlServer.Management.Smo.ExceptionTemplatesをクリックして ください.PropertyCannotBeRetrievedExceptionText&EvtID = MasterDBPath&LinkId = 20476 私はMasterDBPath文字列値を次の場所に設定しようとしました: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer\CurrentVersion` しかし、これは助けにはなりませんでした。 誰もが考えている?
16 sql-server 

2
SQL Server-成長するデータベースファイルのベストプラクティス
私は、SQL Server 2008 r2のデータコレクターを介して2週間、ファイルの増加を監視しています。データベースは、約35(MB)/日で一貫して成長しています。DBは初期サイズの2 GBにまだ達していません。 DBファイルの自動拡張は5MBに設定されています。別のアプローチを試してみたいので、提案やコメントを探しています。 毎週日曜日の夜1:30 AMに実行されるチューニングタスクがあります。タスクは: データベースの整合性を確認する ログファイルを圧縮する-(ログモードがシンプルなので、これは問題ありません) データベースの縮小 インデックスの再編成 インデックスを再構築 統計を更新する 履歴をクリーンアップする 毎週の調整計画にさらに2つのステップを追加したいと思います。 使用領域が特定のしきい値または合計サイズに達した場合、データベースファイルを500 MB増やします。 使用されているスペースが合計サイズの特定のしきい値に達すると、ログファイルを250 MB(縮小後)増やします。 オフラインの時間に成長の負担をかけることにより、高負荷時の自動成長イベントの数を減らしてパフォーマンスを向上させたいと考えています。 自動拡張ファイルに関する質問が2つあります。 ファイルの成長ステップを配置する最適な場所は、現在のステップの前か後ですか? を使用しALTER DATABASE|MODIFY FILEてファイルを拡大すると、どうすれば判断できSpaceUsedInFile >= (TotalFileSpace-@AllowanceThreshold)ますか?


1
2週間非アクティブになった後、Oracleセッションがまだ生きている理由
DB:Oracle 10g O / S:Windows Server 2003 64ビット Webアプリケーションによって生成されたOracleセッションのリストを照会します(program = w3wp.exeによるフィルター) select * from V$session where UPPER(program) LIKE '%W3%' order by logon_time Logon_Timeによると、2012年7月31日または2012年8月1日からのセッション、または本日(2012年8月21日)より前のセッションがまだ生きているのはなぜですか? sqlnet.oraで構成しました:SQLNET.EXPIRE_TIME = 20したがって、20分ごとにOracleが接続がまだアクティブかどうかをチェックしていることを意味します。 すべてのユーザースキーマにはデフォルトのプロファイルがあります。これは、セッションが期限切れになったり死ぬことはないということを意味しますか? Philのコメントに応えて追加: Philの回答に応じて追加:

6
データベースの正規化は停止していますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 私は古い学校に育ちました-アプリケーションのビジネスレイヤーの前にデータベーススキーマを設計することを学びました(または他のすべてにOOADを使用しました)。私はスキーマ(IMHO :)の設計にかなり長けており、不必要な冗長性を削除するためだけに正規化しましたが、速度に影響を与える場所ではありません。つまり、結合がパフォーマンスに影響した場合、冗長性はそのまま残されました。しかし、ほとんどそうではありませんでした。 RubyのActiveRecordやActiveJDBCなどのいくつかのORMフレームワークの出現により(覚えていないが他にもいくつかありますが、たくさんあると確信しています) 「メール」-2NFを完全に破壊します。さて、あまり理解していませんが、これらのORM(またはプログラマー)の一部が1-1または1-0 | 1(つまり、1対0または1)を認識しないと、(ほとんど)緊張します。彼らは、nulls 「今日のシステムがそれを処理できる」という大量の情報がある場合でも、すべてを1つの大きなテーブルとして保持する方が良いと述べています。 メモリの制約は正規化と直接的な相関関係があることに同意します(他の利点もあります:)が、今日の安価なメモリとクアッドコアマシンでは、DB正規化の概念はテキストに残されていますか?DBAは3NF(BCNFではない場合)への正規化を実践していますか?それは重要ですか?「ダーティスキーマ」設計は本番システムに適していますか?それがまだ関連している場合、どのように「正規化」のためにケースを作るべきか。 (注:設計の一部/必要性として冗長性を備えたデータウェアハウスのスター/スノーフレークスキーマについてではなく、たとえばStackExchangeのようなバックエンドデータベースを備えた商用システムについてです)


2
SQL Serverデータツールとパーティション関数
私はスライディングウィンドウの読み込みシナリオを作成していますが、パーティション関数は時間とともに境界を変更します。 SQL Serverデータツール(SSDT)データベースプロジェクトに、いくつかの初期境界をハードコーディングしたパーティション関数を作成しました。 ただし、時間が経つとパーティション関数の境界が変化すると、将来のSSDTデータベースの公開では、境界が元の境界に戻ります。 おそらくパーティション機能の公開を無効にすることで、このシナリオを適切に処理する方法はありますか? 私は変更しようとしたビルドアクションデフォルトから、SSDTに分配関数のプロパティをBuildする、Noneが、その後のプロジェクトが原因によっては、オブジェクトで不足している参照にビルドに失敗します。
16 sql-server 

1
RECOMPILEクエリヒントを使用する場合のクエリ間の実行時間の著しい違い
同じSQL Server 2005インスタンスで2つのほぼ同一のクエリを実行しています。 最初のSELECTクエリは、LINQによって生成された元のクエリです(私は知っています、私は知っています...私はアプリケーション開発者ではなく、DBAです:)。 2番目のものは最初のものとまったく同じOPTION (RECOMPILE)で、最後にaが追加されています。 他に変更はありません。 最初のものは、実行のたびに55秒かかります。 2番目は2秒かかります。 両方の結果セットは同じです。 このヒントがパフォーマンスの劇的な向上をもたらすのはなぜですか? Books OnlineのエントリにRECOMPILEは、あまり詳細な説明はありません。 クエリの実行後にクエリに対して生成されたプランを破棄するようにSQL Serverデータベースエンジンに指示し、同じクエリが次に実行されるときにクエリオプティマイザにクエリプランを再コンパイルさせます。RECOMPILEを指定しないと、データベースエンジンはクエリプランをキャッシュし、それらを再利用します。クエリプランをコンパイルするとき、RECOMPILEクエリヒントは、クエリ内のローカル変数の現在の値を使用し、クエリがストアドプロシージャ内にある場合、現在の値をパラメータに渡します。 RECOMPILEは、ストアドプロシージャ全体ではなく、ストアドプロシージャ内のクエリのサブセットのみを再コンパイルする必要がある場合に、WITH RECOMPILE句を使用するストアドプロシージャを作成するための便利な代替手段です。詳細については、「ストアドプロシージャの再コンパイル」を参照してください。RECOMPILEは、プランガイドを作成するときにも役立ちます。詳細については、「プランガイドを使用したデプロイ済みアプリケーションでのクエリの最適化」を参照してください。 クエリには多くのローカル変数があるため、OPTION (RECOMPILE)クエリヒントを使用すると、SQL Serverは(真剣に)最適化できると推測されます。 私が見ているところはどこでも、それOPTION (RECOMPILE)は避けるべきだと言っている。この説明は、一般に、このヒントを使用すると、SQL Serverはこの実行計画を再利用できないため、毎回再コンパイルする時間を無駄にする必要があるというものです。(しかし)パフォーマンスが非常に優れていることを考えると、今回はこのクエリヒントを使用するのは良いことだと思います。 使用すべきですか?そうでない場合、このヒントとアプリケーションを変更せずに、SQL Serverにより良い実行計画を使用させることができますか?

4
PostgreSQL 9.1ホットバックアップエラー:データベースシステムが起動しています
私はしばらくの間Postgres 9.1のホットバックアップに取り組んできましたが、一貫した問題に遭遇しました。スレーブサーバーでPostgresを再起動すると、pgstartlogログファイルとpg_logディレクトリの下の日次ログファイルがエラーなしで読み込まれます。ただし、psqlコマンドを使用してデータベースに入力しようとすると、エラーが発生します。 FATAL:データベースシステムが起動しています。 また、recovery.confファイルはrecovery.doneにはなりません。私はこのエラーを徹底的に調査し、一貫して同じ応答を見つけました。Postgresを再起動しようとする前にデータベースが完全にシャットダウンされていません。Postgresを再起動した唯一の方法は、service postgresql-9.1 restartor /etc/init.d/postgresql-9.1 restartコマンドを使用することです。このエラーを受け取った後、すべてのプロセスを強制終了し、データベースを再起動しようとしますが、それでも同じエラーを受け取ります。ここからどこへ行くか、この問題を修正する方法が不足しています。以下は、ホットバックアップを完了するために行った正確なプロセスです。 マスターサーバーの構成: pg_hba.conf、次の行を追加しました: ホスト複製postgres IPAddressOfSlaveServer信頼 postgresql.conf: wal_level = hot_standby max_wal_senders = 5 listen_address = '*' ポート= 5432 max_wal_senders = 5 wal_keep_segments = 32 スレーブサーバーの構成: postgresql.conf: hot_standby = on recovery.conf: standby_mode = on primary_conninfo = host = IPAddressOfMasterServer ポート= 5432 ユーザー= postgres restore_command = …
16 postgresql 

3
RDS-MySQLを非アマゾンホストに複製しますか?
AmazonでRDSインスタンスとして実行されているかなり大きなMySQL(5.1)データベースがあります。Amazonからの移行に取り組んでいます。それをスムーズに行うために、RDSインスタンスの読み取り専用レプリカとして新しいハードウェアをセットアップしたいと思います。 RDSがRDS内の複製をサポートしていることは知っています。RDSにないホストに複製するように構成する方法はありますか?

2
単純な結合で使用されない主キーのインデックス
次の表とインデックスの定義があります。 CREATE TABLE munkalap ( munkalap_id serial PRIMARY KEY, ... ); CREATE TABLE munkalap_lepes ( munkalap_lepes_id serial PRIMARY KEY, munkalap_id integer REFERENCES munkalap (munkalap_id), ... ); CREATE INDEX idx_munkalap_lepes_munkalap_id ON munkalap_lepes (munkalap_id); munkalap_idのインデックスが次のクエリで使用されないのはなぜですか? EXPLAIN ANALYZE SELECT ml.* FROM munkalap m JOIN munkalap_lepes ml USING (munkalap_id); QUERY PLAN Hash Join (cost=119.17..2050.88 …

1
テーブルが最後に更新された時刻を見つける
クエリ: SELECT name AS TableName, create_date AS CreatedDate, modify_date as ModifyDate FROM sys.tables order by ModifyDate; ...テーブルが最後に作成および変更された時間を(DDLの観点から)教えてくれます。しかし、実際のデータが最後にテーブルに挿入または削除された時間を知りたいのです。SQL Serverでこれを取得することは可能ですか?

2
動的SQLを使用して指定されたデータベースにビューを作成しますか?
別のデータベースにビューをドロップして作成するための動的SQLを作成しています。 だから私は書いた: set @CreateViewStatement = ' USE ['+ @DB +']; CREATE VIEW [dbo].[MyTable] AS SELECT ........something exec (@CreateViewStatement) それは私にエラーを与えます: 「CREATE VIEW」は、クエリバッチの最初のステートメントである必要があります。 USE DATABASEステートメントを削除すると正常に機能しますが、データベースは指定されなくなります。 この問題を解決するにはどうすればよいですか?

1
MySQLはストアドプロシージャからどのように結果セットを返しますか?
私は、Webアプリケーションで使用するストアドプロシージャを回避しようとしています。MySQLストアドプロシージャの最後のステートメントが何であれ、そのプロシージャの結果セットとして扱われるように思えます。残念ながら、MySQLドキュメントには、プロシージャが複数の結果セットを返すことができるという参照があるようです。この動作はどのようにトリガーされますか?1つの結果セットのみを明示的に返すようにMySQLサーバーに指示するにはどうすればよいですか? (たとえば、SELECTといくつかの挿入を行うクエリがあります。挿入についてクライアントに伝えたくありませんが、クライアントにSELECTの結果セットを与えたいです...)

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