データベース管理者

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

1
SQL Serverデータとログファイルの最適化は、MoveFile APIでライブ
私の雇用主は、Windows MoveFile APIを使用して開いているファイルを最適化するNTFS最適化ソフトウェアの展開を検討しています。これは、2005-2012のSQLバージョンと2003および2008 R2のWindowsバージョンを実行する何千ものSQL Serverサーバーに展開されます。重要なのは、私が話している製品はPerfectDiskですが、同じように機能する同様のプログラムがあると思います。 これまでのテストでは、偶発的なI / Oパフォーマンスの問題を除いて、多くの問題が判明していません。これは驚くべきことではなく、デフラグの再スケジュールとチューニングによって回避できます。しかし、私はデータ破損のリスクについてより懸念しています。 このタイプのソフトウェアをデータベースサーバーの運用環境で実行した経験がある人はいますか?データ破損が発生しましたか? それが問題を引き起こしているという確固たる証拠を見つけることができなくても、私はこれについてはむしろ不安です。 返信ありがとうございます。 追加のために編集:この恐ろしいアイデアはありがたいことに、おそらく一部は私が出した警告のせいで忘れられていました。

1
10 ^ 37/1が算術オーバーフローエラーをスローするのはなぜですか?
最近の大きな数字でのプレイの傾向を続けて、私は最近発生したエラーを次のコードに沸騰させました: DECLARE @big_number DECIMAL(38,0) = '1' + REPLICATE(0, 37); PRINT @big_number + 1; PRINT @big_number - 1; PRINT @big_number * 1; PRINT @big_number / 1; このコードの出力は次のとおりです。 10000000000000000000000000000000000001 9999999999999999999999999999999999999 10000000000000000000000000000000000000 Msg 8115, Level 16, State 2, Line 6 Arithmetic overflow error converting expression to data type numeric. 何? 最初の3つの操作は機能するが最後は機能しないのはなぜですか?そして@big_number、出力を明らかに格納できる場合、算術オーバーフローエラーが発生する可能性があり@big_number / 1ますか?

2
MySQLのSHOW SLAVE STATUSを理解しようとしています
マスタースレーブレプリケーションのセットアップを行っていますが、正常に動作しているようです。以下はSHOW SLAVE STATUSコマンドの結果です: show slave STATUS\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: *.*.*.* Master_User: repliV1 Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 10726644 Relay_Log_File: mysqld-relay-bin.000056 Relay_Log_Pos: 231871 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: data1 Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: …

3
SQL Server 2008の最大テーブル容量
毎年10億行以上をテーブルに挿入するアプリケーションがあります。このテーブルには、いくつか含まれているvarcharとbigintだけでなく、列と1つのBLOB列を。 10億行は、追跡目的で保持される履歴データで構成されます。そのため、このテーブルの最大テーブルサイズに関するこのMSDNの記事に従ってこの構造を続行すると、テーブルの容量に制限があるかどうか疑問に思いました。 そのリンクに記載されているデータファイルのサイズは、テーブルデータファイルグループを参照していますか?

2
ジョブカテゴリのいずれかのジョブが失敗したときにアラート
SQL Server 2008で、特定のカテゴリのジョブが失敗したときに電子メールを送信するアラートを設定することはできますか? SSRSサブスクリプションが失敗するたびに電子メールをセットアップしたいと思っています。これらのサブスクリプションはすべて、カテゴリReport Serverのジョブです。 編集 -SSRSサブスクリプションが失敗しても、ジョブ自体は失敗しないことが判明したため、私の質問はSSRSサブスクリプションの監視の使用には適用されません。しかし、私は私たちの環境で実行している他の仕事についてまだ知りたいです

2
日時列を秒数に変換します
SQL Serverデータベースにdatetime列があります。 列のlong値を表す新しい列を作成する良い方法は何datetimeですか?long秒数を表します。 これをlongsに変換できれば、長い数を固定量で除算できるので、期間ごとのクエリによるグループ化が簡単になると思いました。 テーブルは静的であり、データを更新または削除しません。


2
MongoDBレプリカセットSECONDARYが「ROLLBACK」状態でスタック
私たちのmongodbの最近の自動更新中に、降格PRIMARYしたときPRIMARYに永久にROLLBACK状態になりました。 ROLLBACK状態で数時間経過した後も、mongodbデータベースディレクトリのディレクトリにはロールバック.bsonファイルがありませんでしたrollback。それと、ログファイルの次の行も[rsSync] replSet syncThread: 13410 replSet too much data to roll back、ROLLBACKプロセスが失敗したことを示しているようです。 何がうまくいかなかったかを分析するのを手伝ってほしい。 ログで2つの異なるロールバックが発生したようです。それはそうですか、それとも3時間かかったものですか? 最初のロールバック(19:00時間)が成功した場合、ou rollbackディレクトリに何も表示されないのはなぜですか? これらすべての警告の原因について推測はありますか?それはロールバックの失敗に関連しているのでしょうか? 最初のデータが原因で18秒のデータが失われましたROLLBACKか? 「スタックROLLBACK状態」の問題に対する一般的な解決策はありますか?最終的に、DB全体をホースし、プライマリから再同期する必要がありました。 関連するログ行は次のとおりです。 # Primary coming back after restart... Tue May 15 19:01:01 [initandlisten] MongoDB starting : pid=3684 port=27017 dbpath=/var/lib/mongodb 64-bit host=magnesium Tue May 15 19:01:01 [initandlisten] db version v2.0.5, pdfile version 4.5 …
11 mongodb  rollback 

2
HierarchyIdでツリーブランチをロード/読み取るためのセットベースの方法はありますか
HierarchyIdをいじっていますが、次のことを行うためのセットベースの方法を理解していません。 すべてのサブツリーを一度に挿入する 一度にすべてのサブツリーを取得する この質問は以前の質問に関連しており、HierarchyIdでこれらの2つのタスクを実行する唯一の方法は、一度に1つのノードまたは1つのレベルであると思われます。実体化されたパスを使用している場合、両方のアクションは、単一の(そして些細な)セットベースのコマンドによって簡単に実行されます。 私は何が欠けていますか? 編集:サブツリーを移動する方法も見逃しましたが、ミカエル・エリクソンのコメントからそれを学びました

5
SQLプロファイラーはサーバーのパフォーマンスに影響しますか?
SQL Server 2008が高負荷で失敗するという問題に直面しています。その荷重ケースを見つけて、荷重を処理できるようにコードを最適化する必要があります。私はインターネットでSQLプロファイラーを使用してデータベースの相互作用を追跡し、後で分析して問題が発生する正確なポイントを見つけることができることを発見しました。SQLプロファイラーを起動する方法についても発見しました。しかし、私の質問は、SQLプロファイラーを起動することで、サーバーのパフォーマンスに影響を与えるということですか?

3
T-SQLを介したプログラムによるデータベースの参照
データベース名を引数として取り、そのデータベースのインデックスとその断片化レベルのテーブルを返すストアドプロシージャを書いています。このストアドプロシージャは、DBAデータベース(DBAが監視および最適化に使用するテーブルを含むDB)に存在します。問題のシステムはすべて、SQL Server 2008 R2です。 基本的なクエリは解決しましたが、インデックスの実際の名前を提供しようとしています。私の知る限りでは、その情報は各個人のsys.indexesビューに含まれています。私の特定の問題は、別のデータベースのストアドプロシージャからプログラムによってそのビューを参照しようとしていることです。 説明のために、これは問題となっているクエリの一部です。 FROM sys.dm_db_index_physical_stats(@db_id,NULL,NULL,NULL,NULL) p INNER JOIN sys.indexes b ON p.[object_id] = b.[object_id] AND p.index_id = b.index_id AND b.index_id != 0 クエリは、適切なsys.indexesビューを使用しているため、@ db_idで識別されるデータベースから実行すると正常に機能します。ただし、これをDBAデータベースから呼び出そうとすると、sys.indexesビューが間違ったデータベース用であるため、すべてnullになります。 より一般的に言えば、私は次のようなことができるようにする必要があります: DECLARE @db_name NVARCHAR(255) = 'my_database'; SELECT * FROM @db_name + '.sys.indexes'; または USE @db_name; 文字列連結とOBJECT_NAME / OBJECT_ID / DB_ID関数の組み合わせを使用して、データベースの切り替えや他のデータベースの参照を試みましたが、何も機能しないようです。コミュニティのアイデアがあれば教えていただければ幸いですが、このストアドプロシージャを個別のデータベースに配置するために、ツールを変更する必要があると思います。 提案を事前に感謝します。
11 sql-server 

4
「クライアント処理時間」が長いためにリモートSELECTステートメントが遅いが、ローカルでは速い
実稼働サーバー(SQL Server 2008、非常に強力なマシン)に接続している間、このSELECTステートメントは2秒かかり、すべてのフィールド(合計4 MBのデータ)を返します。 SELECT TOP (30000) * FROM person WITH(NOLOCK); 同じネットワーク上の他のボックスから(SQL認証またはWindows認証を使用して接続)、同じクエリに1分8秒かかります。 私はこの非常に単純なステートメントでテストして、それが索引付けの問題やクエリ関連の問題ではないことを示しています。(現在、すべてのクエリでパフォーマンスの問題があります...) 行はチャンクで提供され、一度にすべてではありません。最初の行をすぐに取得し、行のバッチが入るまで1分以上待ちます。 クエリがリモートボックスから実行されたときのクエリのクライアント統計は次のとおりです。 Query Profile Statistics Number of INSERT, DELETE and UPDATE statements 0 Rows affected by INSERT, DELETE, or UPDATE statements 0 Number of SELECT statements 2 Rows returned by SELECT statements 30001 Number of transactions 0 …

6
サーバーの再起動後にInnodbデータベースのauto_increment IDがリセットされないようにします
私は最近、サーバーの再起動時にInnoDBがAUTO_INCREMENT値を再計算する方法のため、IDリストの上限にあるすべてのレコードのIDが再利用される可能性があることを最近読みました。 ユーザーが削除されると、IDに関連付けられたすべてのものが他のテーブルからも削除されるため、通常、これは問題にはなりません。 ただし、過去の会話が維持されるように、「= User#123 =による投稿」というラベルが付けられたフォーラム投稿を意図的に孤立させておきます。明らかに、IDが再利用される場合、これは問題になります。 この方法でIDが再利用される可能性を低くするのに十分な数の新しいユーザーが常にいるため、私はこれまでこの問題に遭遇したことがありません。ただし、私の新しいプロジェクトでは、サインアップはまれであり、非アクティブなユーザーの削除が頻繁に行われ(特に、「Open Alpha」アカウントはプレビューとして3日間しか持続しないため)、そのようなIDの再利用は3〜3回発生しています。 AUTO_INCREMENTの正しい値を他の場所に保存し、内部値に依存する代わりにそれを使用することにより、問題を「修正」しました。InnoDBに実際の最後の値を記憶させる実際の方法はありますか?
11 mysql  innodb 

4
カテゴリ間で決定するスーパータイプ/サブタイプ:完全にばらばらまたは不完全な重なり
デスクトップコンピュータ、ラップトップ、スイッチ、ルーター、携帯電話などのITハードウェアを格納するインベントリデータベースを構築しています。すべてのデバイスが単一のテーブルに格納されているスーパータイプ/サブタイプパターンと特定の情報を使用しています。サブタイプのテーブルに入れられます。私のジレンマは、次の2つのデザインから選択しています。 上の図では、すべてのデバイスが共通のサブタイプを共有しています。たとえば、デスクトップコンピューターとラップトップは、次のテーブルのレコードを持ちます:デバイス、ネットワークデバイス。スイッチには、デバイス、ネットワークデバイスのレコードがあります。ルーターは、Device、NetworkDevice、WANDeviceにレコードを持っています。位置情報を追跡するデバイスには、位置情報の記録があります。このセットアップについて私が考えたいくつかの長所と短所: 長所:HostnameやLocationIDなどの共通フィールドに基づいてレコードを選択する方が簡単です。 プロ:nullフィールドはありません。 欠点:特定のデバイスのCRUD操作に含める必要があるテーブルは明確ではなく、将来のDBAを混乱させる可能性があります。 下の図では、すべてのデバイスに独自のサブタイプがあります(ここには表示されていないデバイスのクラスがさらにあります)。この状況では、どのテーブルレコードが挿入または選択されるかは明らかです。デスクトップコンピューターとラップトップはコンピューターなどに行きます。このセットアップについて私が考えたいくつかの長所と短所: メリット:サブタイプのCRUD操作に使用するテーブルはすぐにわかります。 メリット:CRUD操作には1つのテーブルのみを使用する必要があります。 欠点:共通のサブタイプフィールドに基づいてレコードをSELECTするには、すべてのテーブルを組み合わせる必要があります。たとえば、HostnameやLocationIDによる検索などです。 どちらの状況でも、ClassDiscriminatorフィールドは、CHECK制約で使用できるようにサブタイプテーブルに配置され、挿入できるタイプを制御します。 設計が優れている推奨事項はありますか、それとも完全に意見の問題であり、データベースの意図した目的に依存していますか? 編集:私が持っている特定の質問は、「NetworkDevice」テーブルの重複する性質についてです。このテーブルは、コンピュータ、スイッチ、ルーターなど、ホスト名やIPアドレスを持つデバイスのネットワーク情報を保持するためのものです。このテーブルの重複する性質は問題を引き起こす可能性があるものですか、それともこの方法で実装しても問題ありませんか? 提供された入力について、事前にありがとうございます。追加情報が必要かどうか尋ねてください。

2
表スペースからの論理スペースのリカバリー
DATAと呼ばれるテーブルスペースがあり、自動拡張がfalseに設定されています。このテーブルスペースには2つのデータファイルがあり、350 GBの物理スペースを使用するように設定されています。 1週間前、私はuser_tablespacesとdba_data_filesにクエリを実行したところ、利用可能な論理スペースが20%あることに気付きました。次に、クリーンアップを続行し、このテーブルスペースのテーブルから多くのレコードを削除しました。利用可能なスペースが大幅に増えると予想していました。残念ながら、ビューを照会したところ、使用可能なスペースが20.5%になりました。 これはデータの断片化が原因である可能性がありますか?どういうわけかテーブルスペースを「デフラグ」して、失われたスペースを回復できますか?または、テーブルスペースを最初から再作成する必要がありますか?

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