データベース管理者

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

2
インスタントファイル初期化を有効にして作成されたSQL Serverデータベースファイルを「クリーンアップ」しますか?
SQL Serverでインスタントファイル初期化を有効にしているので、データベースファイルの「空の」部分は、割り当てられる前にゼロ化されません。私の理解では、これはファイルに「削除された」データが含まれる可能性があることを意味します。 そこで、データベースのコピー(おそらくバックアップファイル)を社外に送信したいと思います。しかし、潜在的に機密性の高い「削除された」データはすべてファイル内に残っています。次に、ファイルの未使用部分をゼロにします。 それは可能ですか?新しいデータベースを作成してすべてをコピーしたり、データベースのコピーをインスタントファイル初期化を有効にせずに別のサーバーに復元したり、ShrinkFileコマンドで積極的にデータベースファイルのほとんどまたはすべての未使用部分を削除したりできると思います、しかし手作業が少なく時間のかかる方法はありますか?理想的には、インスタントファイル初期化が有効になっていない場合と同じように、SQLにファイルのゼロ化を指示するコマンド。

1
ユーザーアカウントごとにテーブルを作成するか、MYSQLのすべてのユーザーデータ用に1つの巨大なテーブルを作成する方が良い
個々のユーザーがアカウントにサインアップし、基本的にテキストドキュメントをmysqlデータベースエントリに保存できるようにするWebディレクトリを作成しています。 最初は数百人のユーザーしかいないと思われますが、ある時点で10,000〜100,000人になることを期待しています。また、各ユーザーは100〜200の「ドキュメント」をアップロードできます。 ユーザー番号でインデックス付けされた1つの巨大なテーブルを作成する方が効率的ですか?理論的には20,000,000エントリに成長する可能性があります。または、先に進み、個々のドキュメントを使用して各ユーザーのテーブルを作成しますか? データベースに数千のテーブルを置くことは健全ではないと想定していますが、これに関する具体的なデータは実際には見つかりません。
8 mysql 

3
大きなレプリケートされたディメンションの更新(SQL Server PDW)
データウェアハウスにはSQL Server PDWアプライアンスを使用しています。ウェアハウス内のテーブルの1つは、約2,000万行の複製されたテーブルです。ETLプロセスの一部として、このディメンションの古いレコードを期限切れにする必要があります。ただし、少数のレコード(<100)の更新が完了するまでに1時間以上かかることがわかります。これは、できれば改善したいことです。 当然、私が考えた1つのオプションは、このディメンションを複製から分散に変更することでした。私のテストでは、ETLプロセスに時間がかかる(1.5時間から30秒に短縮された)問題が修正されることを示していますが、結合がほとんど同じ分布に基づいていないため、このディメンションの分散バージョンに対するすべての結合が影響を受けます。カラム。これらのクエリのいくつかの実行プランを見ると、通常、ShuffleMoveまたはBroadcastMove操作のいずれかが表示されます。 ここにあるPDWの第一人者に対する私の質問は次のとおりです。 このディメンションの複製バージョンでレコードを更新するパフォーマンスを向上させるために他にできることはありますか? 繰り返しになりますが、分散テーブルへの移行は、他の人が開発した何百ものSQLクエリやレポートに影響を与えるため、最善の解決策ではないようです。

1
Postgres 9.1.6エラーインデックスのブロック0に予期しないゼロページが含まれています
私は、Debianサーバーで実行されているPostgres 9.1.6でストリーミングレプリケーションをセットアップしましたが、問題なく動作します。 レプリカDBでクエリを実行しようとすると、以下のエラーが発生します。 ERROR: index "tbl_cust_id_idx" contains unexpected zero page at block 0 HINT: Please REINDEX it. このエラーの原因は何ですか? 質問は/programming/17865135/postgres-9-1-6-error-index-contains-unexpected-zero-page-at-block-0にも投稿されています

1
SQL Serverの最大および最小メモリ構成
このユースケースでの最小メモリと最大メモリの正しい設定は何ですか? サーバーには、Windows Server 2008 R2 / SQL Server 2008 Standard Editionを実行する8GBのRAM、デュアルIntel Xeonプロセッサーが搭載されています。30GBから5GBのサイズのデータ​​ベースをいくつか実行しています。 当初、メモリ使用量はデフォルト設定に設定されていました(min = 0 max = 2,147,483,647)。これらの設定では、ほとんどのメモリ使用量がsqlservr.exeによって占められ、最終的にサーバーは1〜2日ごとに再起動する必要があります。最初は正常に実行されますが、1日以内に、主キーを使用してレコードを検索するなどの単純な操作でタイムアウトが開始されます。 min = 4,096とmax = 6,144を変更しました。これにより、メモリ使用量は1.4GBのみになります。ただし、現在は4つすべてのCPUが常に50〜60%のCPU使用率で実行されています。サーバーの方がはるかに安定していますが、タスクの実行には約3分の1時間がかかります。

1
MS SQL Serverの日付タイプについて
以下を検討してください。 declare @dt datetime, @dt2 datetime2, @d date set @dt = '2013-01-01' set @dt2 = '2013-01-01' set @d = '2013-01-01' select convert(varbinary, @dt) as dt, convert(varbinary, @dt2) as dt2, convert(varbinary, @d) as d 出力: dt dt2 d ------------------ -------------------- -------- 0x0000A13900000000 0x07000000000094360B 0x94360B 今、私はすでにから理解ドキュメントdatetime小さい範囲を持っており、1753年1月1日から開始し、しばらくdatetime2してdateその開始日として0001-01-01を使用しています。 私も理解していない何か、ということですdatetimeが表示されますが、リトルエンディアンしばらくするdatetime2と、dateビッグエンディアンです。その場合、どうすれば適切に並べ替えることができますか? dateタイプによって表される整数の日数を知りたいかどうかを検討してください。あなたはこれを行うことができると思います: declare @d date set …

2
適切なMySQLデータベースのメンテナンス
これで問題が広すぎないことを願っています。私とそれが偶然出会う将来のdba noobsを助けることができると確信しています。 私はDBAの役割を担うシステム管理者です(私はCEOの見通しを助けたので、明らかにデータベースを管理できます!)。それはデータベースサーバーのそれほど大きくない、または忙しいわけではありません... mysqldumpのサイズは約6GBであり、それほど大きくなるまでに5年かかりました。Muninは、ピーク時に1秒あたり平均40〜60クエリを実行していると報告しています。 私の上司は私にOracle Universityシステム管理コースの受講料を支払いましたが、受講した後は、mysqlサーバーのさまざまな部分、機能、方法を説明するだけです。しかし、それはそれほど深くはなく、そのコースからDBAに出ることは絶対にありません。 現在のDBAとして、すべてがスムーズに実行されていることを確認するにはどうすればよいですか?実行できる日常のメンテナンスタスクはありますか?チェックすべき特定のメトリックはありますか?または言い換えると、DBAとして、すべてを良好な状態に保つために毎日何をしていますか? 答えを少し調整するのに役立つ場合は、いくつかの詳細を以下に示します。テーブルは171ありますが、3つを除いてすべてinnodb、その他はmyisamです。RBRを使用して、プライマリデータセンターとディザスターリカバリーサイトの間にマスター/スレーブレプリケーションをセットアップしました。バージョンは5.5.28です。 私に何ができる?

3
Microsoft SQL Server 2008では、構文により「Parallel Data Warehouse(PDW)機能が有効になっていません」というエラーが生成されます。
並べ替えられたパーティションの集計から生成された次の仮想列があります。 MIN(picture_id) OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC ) しかし、それを実行すると、次のようになります。 Msg 11305, Level 15, State 10, Line 12 The Parallel Data Warehouse (PDW) features are not enabled. これは興味深いところですが、パーティションに並べ替え順序がなくても機能します。 MIN(picture_id) OVER ( PARTITION BY [360_set] ) さらに、ROW_NUMBER()ウィンドウ関数(集計関数ではない)は、パーティションで明示的な順序で動作します。 ROW_NUMBER() OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC ) …

2
SQL ServerがWindowsイベントビューアに配置するものの数を減らす方法は?
自動化された単体テストの一環として、多くのデータベースが作成、セットアップされ、削除されます。問題は、これが発生するたびに、WindowsイベントビューアでSQL Serverから大量のレコードを取得することです。メッセージは主に「起動中」、「データベースオプションの設定」、「インデックスが復元されました」のようなものです。 SQL Serverの構成を変更して、これらの些細な「情報」レベルのイベントをイベントログに記録しないようにする方法はありますか。ログがいっぱいになるため、有用な情報を見つけるのが非常に難しくなります。

2
JOINを使用してテーブルを効率的に更新する
世帯の詳細が記載されたテーブルと、その世帯に関連するすべての人物の詳細が記載されたテーブルがあります。世帯テーブルには、2つの列を使用して定義された主キーがあります- [tempId,n]。personテーブルには、3つの列を使用して定義された主キーがあります。[tempId,n,sporder] 主キーのクラスター化インデックスによって指示された並べ替えを使用して、各世帯[HHID]および各人の[PERID]レコードに一意のIDを生成しました(以下のスニペットはPERIDを生成するためのものです): ALTER TABLE dbo.persons ADD PERID INT IDENTITY CONSTRAINT [UQ dbo.persons HHID] UNIQUE; 今、私の次のステップは、各人を対応する世帯に関連付けることです。マップ[PERID]には[HHID]。2つのテーブル間の横断歩道は、2つの列に基づいています[tempId,n]。このため、次の内部結合ステートメントがあります。 UPDATE t1 SET t1.HHID = t2.HHID FROM dbo.persons AS t1 INNER JOIN dbo.households AS t2 ON t1.tempId = t2.tempId AND t1.n = t2.n; 私は合計で1928783世帯の記録と5239842人の記録を持っています。現在、実行時間は非常に長くなっています。 さて、私の質問: このクエリをさらに最適化することは可能ですか?より一般的には、結合クエリを最適化するための経験則は何ですか? より良い実行時間で私が望む結果を達成できる別のクエリ構造はありますか? 私がしている実行計画アップロード SQLPerformance.comに全体のスクリプトは、SQL Server 2008によって生成されたが

5
「select * from Relational(owner.table)」の意味は何ですか?
最近、フォームのアラートログにエラーが発生しました 301598: Tue Jul 16 03:58:29 2013 301599: ORA-01555 caused by SQL statement below 301600: SELECT * FROM RELATIONAL(<owner>.<table>) ORA-01555エラーの処理方法は知っていますが、などのエラーは発生しませんSELECT * FROM RELATIONAL。で調べましたがDBA_OBJECTS、そのような関数/演算子/何もありません。 「SELECT * FROM RELATIONAL」のグーグル検索では、ORA-01555に関連する質問のみが返されました。 だから、私の質問は:ここでRELATIONALキーワードの意味は何ですか?
8 oracle 

1
XML列のINおよびNOT IN
xml列を持つテーブルがあります。Xmlは <Root> <Row> <user>abc</user> <Rowid>1</Rowid> </Row> <Row> <user>vf</user> <Rowid>2</Rowid> </Row> <Row> <user>ert</user> <Rowid>3</Rowid> </Row> <Maxrowid>3</Maxrowid> </Root> 次に、以下のクエリは、ノード 'user'()に値 'abc'または 'xyz'を含むxml列を含む行のsl_no列とmyxmlcolumnを返します。クエリの下では、SQLのINオプションに似ています。 SELECT [mytable].[Sl_no], [mytable].[myxmlcolumn] FROM [mydb].dbo.[mytable] WHERE [myxmlcolumn].exist('for $x in /Root/Row where (($x/user[fn:upper-case(.)=(''ABC'',''XYZ'')])) return $x') > 0 SQL 'NOT IN'と同じように機能する同様のクエリが必要です。それは私の場合、xml列のノード「user」()に「abc」または「xyz」の値がない行が必要です。だから私を助けてください。

6
大規模なデータベースの移動
CentOSサーバーがあり、/ var / lib / mysql /は125GBです(ディスクには1GBの空き容量があります)。 通常、mysqldumpを使用してデータベースをバックアップしますが、通常はそのような大きなデータベースを操作しないため、データベースを新しいサーバーにコピーする最も安全な方法を知る必要があります。 すべてのアドバイスに感謝します!

1
SQLとツリーのリンクリスト
SQLはテーブルのような操作とより密接に関連しており、再帰的ではありませんが、リンクされた(またはダブルリンクされた)リストの概念(たとえば、Cにあるような)を実装したいとします。 リンクされたリストの任意の場所から任意の場所にアイテムを移動できることを考慮して、これを効率的に行う方法はありますか? CLRを使用するいくつかのソリューション? それとも、SQL Serverに持ち込まないでください。 この質問はリンクされたリストVSツリーの議論にも発展したことに注意してください 私はSQL Serverをピン留めしましたが、これは学術的な質問なので、これはデータベースに持ち込むべきではないという結論に達したとしても、他のソリューションでも良いです。

3
データベースの一括更新/ CSVファイルからの挿入
あるデータベースから別のデータベースへのアプリケーション固有のデータインポート機能を実装しています。 たとえば、10000行を含むCSVファイルがあります。これらの行は、データベースに挿入/更新する必要があります。 いくつかの行がデータベースに存在する場合があり、それらは更新する必要があることを意味します。データベースに存在しない場合は、それらを挿入する必要があります。 可能な解決策の1つは、1行ずつ読み取り、データベースのエントリを確認し、それに応じて挿入/更新クエリを作成することです。ただし、このプロセスでは、更新/挿入クエリを作成してデータベースで実行するのに時間がかかることがあります。CSVファイルに数百万のレコードが含まれる場合があります。 この機能を実現する他のより速い方法はありますか?
8 java  oracle 

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