データベース管理者

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

3
SQL Server TDEの代替
透過的データ暗号化機能を含むSQL Server Enterprise Editionのコストが高いため、代替製品を探していますが、いくつかのオプションしか見つかりませんでした。 DbDefence NetLib暗号化 上記の製品のいずれかでの経験の詳細(パフォーマンスへの影響、使いやすさなど)を誰かが提供できますか? SQL Server TDEの他の選択肢はありますか? 注:現在SQL Server 2008 R2 Standard Editionを使用しています。

2
どちらを信頼しますか?
ベンダーとの長期にわたる問題のトラブルシューティングを行っています。彼らのソフトウェアはフリーズして、週に1〜2回作業を停止する傾向があり、私たちの操作に大きな混乱を引き起こしています。多くのGBのログとDBのバックアップを送信しても、原因を特定できませんでした。最近、彼らは問題が私たちのメンテナンスに関するものであり、おそらくソフトウェアに関するものではないことを示唆し始めています(問題が発生したときに長時間実行されているクエリ、CPU / RAM / IOプレッシャー、またはデッドロックさえないにもかかわらず)。特に彼らは私たちのインデックスが問題であると言っています。 彼らが使用するのにお気に入りのツールはDBCC showcontigですが、これはMSによって廃止されると主張しています。彼らは特にスキャン密度と範囲の断片化にこだわっています。言い訳を取り除くために、<90%のスキャン密度または> 10%の断片化でインデックスを再構築する積極的な夜間メンテナンスを行いました。これにより、スキャン密度トレインからそれらをある程度放棄しましたが、エクステントの断片化に固定されたままです。DBCC showcontigは、数時間前に再構築されたインデックスでも、高度な断片化を示します。以下は、「可能性のある問題」として指摘されたテーブルのdbcc_showcontigおよびsys.dm_db_index_physical_statsの結果です。 DBCC SHOWCONTIG スキャンしたページ................................:1222108 スキャンされた範囲..............................:152964 エクステントスイッチ..............................:180904 平均 エクステントごとのページ..................................:8.0 スキャン密度[ベストカウント:実際のカウント] .......:84.44%[152764:180905] 論理スキャンの断片化..................:3.24% エクステントスキャンの断片化...................:35.97% 平均 ページあたりの空きバイト..................................:692.5 平均 ページ密度(フル).....................:91.44% sys.dm_db_index_physical_stats index_type_desc alloc_unit_type_desc Avg_fragmentation_in_percent page_count CLUSTERED INDEX IN_ROW_DATA 3.236803129 1222070 NONCLUSTERED INDEX IN_ROW_DATA 0.680074642 48230 NONCLUSTERED INDEX IN_ROW_DATA 0.093237195 48264 NONCLUSTERED INDEX IN_ROW_DATA 0.03315856 48253 NONCLUSTERED …

3
誤ってデータベース名を変更する(SQL Server 2008)
それは私にはまだ起こりませんでした。しかし、私はこれについて考えていました。 トレーニング環境をいじくり回していて、誤ってデータベース名をクリックしてから、文字Aに触れました。 Enterキーを押したとしましょう。現在、データベースの名前はAですが、元の名前を覚えていません。CTRL + Zは機能しません。 このような場合、本番環境ではどうしますか? データベースがSINGLE USERとして設定されていないため、それが起こり得ないことはわかっています。しかし、それが起こった場合。何をすべきか?議論のために、それは現在誰も使用していないデータベースだとしましょう。

3
大量のレコードを短時間でデータベースに挿入する方法は?
最速の方法で、大量のレコード(500,000)を一度にデータベースに挿入する必要があります。一度に1,700件のレコードを挿入してみましたが20分かかりました!! とを使用SQL-SERVERしていC#ます。 次の表は高速挿入の手法には貢献しませんが、挿入する必要のあるフィールドの数について理解を深めるために、とにかくリンクすることにします(約500Kで複製します)。
8 sql-server  c# 

3
sp_MSForEachDBを使用してデータベースをループするときにIFステートメントがTempDBをスキップしない
[SQL Server 2012 SP2 EE] 次のスクリプトでtempdbに関するエラーが発生するのはなぜですか? exec sp_MSForEachDB ' IF ( (select database_id from sys.databases where name = ''?'') > 4) BEGIN ALTER AUTHORIZATION ON DATABASE::? TO [sa]; ALTER DATABASE [?] SET RECOVERY SIMPLE; END' ここに私が得るエラーがあります: Msg 5058, Level 16, State 1, Line 5 Option 'RECOVERY' cannot be set in …

2
時間の重複に基づいて開始日と終了日を決定するクエリ
次のデータが与えられます: id | user_id | started | closed | dead ------------------------------------------------------------------------------------------- 7714 | 238846 | 2015-01-27 15:14:50 | 2015-02-02 14:14:13 | NULL 7882 | 238846 | 2015-01-28 13:25:58 | NULL | 2015-05-15 12:16:07 13190 | 259140 | 2015-03-17 10:11:44 | NULL | 2015-03-18 07:31:57 13192 | 259140 | 2015-03-17 10:12:17 …
8 mysql 

1
MySQLが数値列にNULLをロードする
MySQL 5.6.23、InnoDB コマンドを使用して文字区切りのテキストファイルからテーブルを読み込んでいます。この設定の文字であるLOAD DATA INFILEを含むすべてのフィールドで、テーブルにを配置します。一部の数値タイプにはこの動作がありますが、他の数値タイプには。私が使用しており、一部の列は適切に値を取得するため、固定行形式の問題ではありません。\NNULLNULL0FIELDS TERMINATED BYNULL これらは、テスト中に観察したタイプです。 INT挿入NULL秒 DECIMAL(x,0)挿入NULL秒 DECIMAL(x,y)挿入0.0秒 FLOAT挿入0秒 DOUBLE(x,y)挿入0.0秒 DOUBLE挿入0秒 問題の列はすべてで定義されDEFAULT NULLます。さまざまな関数がこれら0のをに変換できることを知っていNULLます。問題は、10進精度を処理できNULL、ロード時にs も挿入するデータ型があるかどうかです。 さらに、文字列、空の文字列、null値の違いに関する誤解に関する質問がたくさんあります。(例えば 実施例の 一例)、これは、問題ではないNULLのがあるとDECIMAL(X、3)のように定義された場合、私は不適切次いで、DECIMAL(X、0)として再定義し、同じ列に適切にロードされます。

1
IO_COMPLETIONを待機している中断されたSQL Serverトランザクションを終了する方法は?
5時間以上実行されているトランザクションがあります。ディスク領域が不足しています。セッションは強制終了されましたが、IO_COMPLETIONを待機しています。実際、wait_typeはPAGEIOLATCH_EXに変更されました。一時停止したSQL Serverトランザクションを終了するにはどうすればよいですか?データはすべて再入力できるため、データが失われる心配はありません。 session_id: 54 STATUS: suspended blocked by: 0 wait_type: PAGEIOLATCH_EX Elapsed Time (in Sec): 19750.420000 open_transaction_count: 2

1
類似性関数の最適なインデックス
したがって、このテーブルには620万件のレコードが含まれており、列の類似性を使用して検索クエリを実行する必要があります。クエリは次のとおりです。 SELECT "lca_test".* FROM "lca_test" WHERE (similarity(job_title, 'sales executive') > 0.6) AND worksite_city = 'los angeles' ORDER BY salary ASC LIMIT 50 OFFSET 0 where(year = X、worksite_state = N、status = 'certified'、visa_class = Z)にさらに条件を追加できます。 これらのクエリの一部を実行すると、30秒を超える非常に長い時間がかかる場合があります。時々1分以上。 EXPLAIN ANALYZE 前述のクエリの私にこれを与えます: Limit (cost=0.43..42523.04 rows=50 width=254) (actual time=9070.268..33487.734 rows=2 loops=1) -> Index Scan using index_lca_test_on_salary …

2
基本設計、初回データベース設計に関するアドバイス
私はJava開発者になるためのコースを取っています。 コースにはデータベースの使用が含まれますが、残念ながら実際に設計することはありません。 ほとんどの場合、事前に作成されたデータベースを取得し、データを挿入、更新、読み取り、または削除するためのコードを実装する必要があります。 しかし、私の最終テストが来るとき、私はデータベースを含む何かを作ることになる可能性が高いので、良いデータベース設計は多くの違いを生むことに気付いたので、設計のこつを得るためにいくつかの小さいものを設計してみたいと思います使用するコードを記述します。 これらの種類の質問がここで許可されていて、広すぎないことを願っています。 これは私が何かのように簡単なために作られた小さなデザインであるclubsとmembersしてaddressesとphonenumbers。 複数のクラブがあります。 各クラブには複数のメンバーがいます(自明) 会員は複数のクラブに所属することはできません メンバーは複数の電話番号とメールアドレスを持つことができます メンバーは1つのアドレスしか持てません アドレスは異なるメンバー(カップルまたは兄弟)に属することができます 私の最大の混乱: Club所有者を説明する列を追加したい場合、誰がメンバーにもなりますが、同じメンバーを2回リストしない場合の最善の方法は何ですか? すべてのテーブルをIDの自動インクリメントに配置する必要がありますか、それとも悪い考えですか?(メリット/デメリット?) [外部キー]タブで外部キーを追加すると、これらは自動的に正しいテーブルに対応しますか、それとも列に追加する必要がありますか?(写真2を参照) そして、すべての私はおそらくnoobiest質問...ドゥ私はの外部キー置くphonenumberとemailPERSON_IDにリンクし、それぞれのテーブル内のか、私は人のテーブルににphoneNumberやメール同上のを置く必要がありますか? (写真の言語が英語ではないことをお詫びします。これがそれほど問題にならないことを願っています)

1
Postgresql:オブジェクトを(json)配列に集約します(サブクエリの問題)
あいまいなタイトルで申し訳ありませんが、これを説明する適切な言葉がわかりません。 一連の列を適切に機能するオブジェクトに変換する次のクエリがあります。 SELECT row_to_json(t) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t ただし、特定のカテゴリに含まれるオブジェクトを配列にグループ化したいと考えています。このカテゴリは、「cargoProductId」という名前のテーブル内の4番目の列によって定義されます。配列には、キーとして「cargoProductId」の値が必要です。そう: "961":[ {"type":"Feature",.... {"type":"Feature",.... {"type":"Feature",.... ], "962":[ ..... ] だから私はこれと最後の1時間半ほど苦労してきました。私にはこれを行う方法の手がかりは本当にありません。これは私が今持っているものです: SELECT array_agg(row_to_json(t)) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t) FROM "bgbCargoMinardJSON" GROUP BY "carProductId"


1
SQL Serverのマージ行サイズオーバーフロー-「サイズの行を作成できません。」
データをマージしようとしているターゲットテーブルには、約660列があります。マージのコード: MERGE TBL_BM_HSD_SUBJECT_AN_1 AS targetTable USING ( SELECT * FROM TBL_BM_HSD_SUBJECT_AN_1_STAGING WHERE [ibi_bulk_id] in (20150520141627106) and id in(101659113) ) AS sourceTable ON (...) WHEN MATCHED AND ((targetTable.[sampletime] <= sourceTable.[sampletime])) THEN UPDATE SET ... WHEN NOT MATCHED THEN INSERT (...) VALUES (...) 初めてこれを実行したとき(つまり、テーブルが空のとき)は成功し、1行挿入しました。 同じデータセットを使用してこれを2回実行したときに、エラーが返されました。 許容最大行サイズ8060より大きいサイズ8410の行を作成できません。 すでに挿入されている同じ行を2回目にマージしようとしたときにエラーが発生したのはなぜですか。この行が最大行サイズを超えた場合、そもそも挿入できない可能性があります。 だから私は2つのことを試しました(そして成功しました!): マージステートメントから「WHEN NOT MATCHED」セクションを削除する マージしようとした同じ行で更新ステートメントを実行する …

2
プログラムでテーブルを結合するために必要なすべての結合を見つける
SourceTableとTargetTableを指定して、すべての結合が必要な文字列をプログラムで作成します。 要するに、私はこのような文字列を作成する方法を見つけようとしています: FROM SourceTable t JOIN IntermediateTable t1 on t1.keycolumn = t.keycolumn JOIN TargetTable t2 on t2.keycolumn = t1.keycolumn 特定のテーブルのすべての外部キーを返すクエリがありますが、これをすべて再帰的に実行して最適な結合パスを見つけ、文字列を作成しようとすると、制限が生じます。 SELECT p.name AS ParentTable ,pc.name AS ParentColumn ,r.name AS ChildTable ,rc.name AS ChildColumn FROM sys.foreign_key_columns fk JOIN sys.columns pc ON pc.object_id = fk.parent_object_id AND pc.column_id = fk.parent_column_id JOIN sys.columns rc …

3
Postgres部分インデックスの作成を高速化
Postgres 9.4で大きな(1.2 TB)静的テーブルの部分インデックスを作成しようとしています。 私のデータは完全に静的なので、すべてのデータを挿入してから、すべてのインデックスを作成できます。 この1.2 TBのテーブルrun_idには、データをきれいに分割するという名前の列があります。さまざまなをカバーするインデックスを作成することにより、優れたパフォーマンスを得ていますrun_id。次に例を示します。 CREATE INDEX perception_run_frame_idx_run_266_thru_270 ON run.perception (run_id, frame) WHERE run_id >= 266 AND run_id <= 270; これらの部分インデックスにより、望ましいクエリ速度が得られます。残念ながら、各部分インデックスの作成には約70分かかります。 CPUが制限されているようです(topプロセスの100%を示しています)。 部分インデックスの作成を高速化するために何かできることはありますか? システム仕様: 18コアXeon 192GB RAM RAIDに12個のSSD 自動バキュームがオフになっています maintenance_work_mem:64GB(高すぎる?) テーブル仕様: サイズ:1.26 TB 行数:10537億 一般的なインデックスサイズ:3.2GB(〜.5GBの差異があります) テーブル定義: CREATE TABLE run.perception( id bigint NOT NULL, run_id bigint NOT NULL, frame bigint …

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