データベース管理者

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

5
SSMSでサーバーエージェントが見つかりませんでした
私はガイドに従っています-http: //www.sqlchicken.com/2009/07/how-to-create-a-server-side-trace-with-sql-profiler/ステップ8に到達するまで動作しています 次に、新しく作成したスクリプトをスケジュールします。SSMSで、トレースするサーバーに接続します。SQL Serverエージェントに移動して展開し、ジョブフォルダーを表示できるようにします。[ジョブ]フォルダを右クリックして、[新しいジョブ]を選択します。 見つけられませんSQL Server Agent。これをどこでSQL Server Agent表示できますか?現在のユーザーにすべてのアクセス許可を与えました。

3
ETLよりもELTプロセスを使用することに賛成する論点は何ですか?
私の会社では、ETL(extract-transform-load)プロセスを使用する代わりに、ELT(extract-load-transform)プロセスを使用していることに気付きました。 2つのアプローチの違いは何ですか?また、どの状況で一方が他方よりも「良い」でしょうか?いくつかの例を提供できれば素晴らしいと思います。


3
InnoDBが行カウントを保存しないのはなぜですか?
InnoDBをエンジンとして使用するテーブルではSELECT COUNT(*) FROM mytable、特にテーブルが大きくなり、そのクエリの実行中に一定の行の挿入/削除がある場合、クエリは非常に不正確で非常に遅いことを誰もが知っています。 私が理解したように、InnoDBは行数を内部変数に保存しません。これがこの問題の原因です。 私の質問は:なぜこれがそうなのか?そのような情報を保存するのは難しいでしょうか?これは非常に多くの状況で知っておくべき重要な情報です。そのような内部カウントが実装されるかどうか私が見る唯一の難しさは、トランザクションが関与している場合です:トランザクションがコミットされていない場合、それによって挿入された行をカウントしますか? PS:私はDBの専門家ではなく、MySQLを単純な趣味として持っているだけの人です。だから、私がばかげたことを尋ねただけなら、過度に批判的にならないでください:D。
19 mysql  innodb  count 

3
innodb_file_per_tableはお勧めですか?
テーブルの1つだけが数百万行に成長し、残りは100万行未満になるアプリケーションがあります。それでは、innodb_file_per_tableを使用するか、1つの.ibdのままにしておくべきでしょうか。実行する結合があるときに、より多くのディスクアクセスが必要なので、私はそれと一緒に行かないと言ういくつかの記事を読みましたか?レポート生成のために、このテーブルと他のテーブルを結合します。
19 mysql  innodb 

9
データベースオブジェクトのバージョン管理
開発者が作業しているデータベースが大きすぎます(多くのデータベースオブジェクトがあります)。dbオブジェクトの変更を管理する必要があります(変更管理)。当社には、dbの変更のみを担当する人はいません。そのため、データベースとスクリプトを同期できる、標準コードのバージョン管理などのデータベースオブジェクトの安全なソースが必要です。最高のものは何ですか。信頼性が高く、安価で、機能的-2つ選択してください:)

5
データベースの整合性を強化する
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 これは、外部キー、チェック制約などを持たせる代わりに、アプリケーションにデータベースの整合性を強制することに意味があるでしょうか? 内部データベースツールを使用してデータベースの整合性を強制しない場合、パフォーマンスの向上はどの程度期待できますか?

4
SSD上のSQL Serverデータベース-テーブルごとに個別のファイルを使用する利点はありますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 約30のテーブルがあるデータベースを作成しています。各テーブルには数千万の行が含まれ、各テーブルには単一の重要な列とプライマリ/外部キー列が含まれ、重い場合でもクエリの効率を最大限に高めます。更新と挿入を行い、クラスター化インデックスを多用します。2つのテーブルには可変長のテキストデータが含まれ、そのうちの1つには何億もの行が含まれますが、残りのテーブルには数値データのみが含まれます。 使用可能なハードウェア(約64 GBのRAM、非常に高速なSSD、および16コア)からパフォーマンスの最後の一滴を絞り出したいので、各テーブルに独自のファイルを持たせることを考えていました。 2、3、4、5、またはそれ以上のテーブルに参加しています。各テーブルは常に個別のスレッドを使用して読み取られ、各ファイルの構造はテーブルの内容と密接に調整されます。 SQL Serverが特定のテーブルの内容に追加するため。 1つの注意点は、SQL Server 2008 R2 Web Editionにこだわっています。これは、自動水平分割を使用できないことを意味します。これにより、パフォーマンスの向上として除外されます。 テーブルごとに1つのファイルを使用すると、実際にパフォーマンスが最大化されますか、それとも冗長になるビルトインSQL Serverエンジンの特性を見落としていますか? 次に、テーブルごとに1つのファイルを使用するのが有利な場合create table、特定の論理ファイルではなくファイルグループにテーブルを割り当てるオプションしか提供されないのはなぜですか?そのため、シナリオ内のすべてのファイルに対して個別のファイルグループを作成する必要があります。これは、SQL Serverが、提案していることを実行することで得られる利点を想定していないことを示唆しています。

5
SQL:CPUまたはIOでない場合、INSERTの速度が低下するのは何ですか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 書き込みが多い製品のデータベースがあります。SSDを備えた新しいサーバーマシンを購入しました。驚いたことに、挿入ははるかに遅いストレージを備えた古いマシンよりも高速ではありませんでした。ベンチマーク中に、SQL Serverプロセスが示すIOレートが非常に低いことがわかりました。 たとえば、ループの周りにBEGIN TRANとCOMMITを追加したことを除いて、このページにあるスクリプトを実行しました。せいぜい、ディスク使用量が7Mb / sに達するのを見ることができましたが、CPUはほとんど5%に触れませんでした。サーバーには64Gbがインストールされており、10を使用しています。合計実行時間は、最初の呼び出しでは2分15秒、その後の呼び出しでは約1分でした。データベースは単純なリカバリであり、テスト中はアイドル状態でした。各呼び出しの間にテーブルを削除しました。 なぜこのような単純なスクリプトがそんなに遅いのですか?ハードウェアはほとんど使用されていません。専用ディスクベンチマークツールとSQLIOの両方は、読み取りと書き込みの両方でSSDが500Mb / s以上の速度で正しく実行されることを示しています。ランダム書き込みはシーケンシャル書き込みよりも遅いことを理解していますが、クラスター化インデックスを持たないテーブルへのこのような単純な挿入は、はるかに高速になると予想されます。 最終的に、このシナリオははるかに複雑ですが、最初に単純なケースを理解する必要があると感じています。簡単に言うと、アプリケーションは古いデータを削除し、SqlBulkCopyを使用して新しいデータをステージングテーブルにコピーし、フィルター処理を実行し、最後にMERGEおよび/またはINSERT INTOを使用してデータを最終テーブルにコピーします。 ->編集1:Martin Smithによってリンクされた手順に従い、次の結果が得られました。 [Wait Type] [Wait Count] [Total Wait (ms)] [T. Resource Wait (ms)] [T. Signal Wait (ms)] NETWORK_IO 5008 46735 46587 148 LOGBUFFER 901 5994 5977 17 PAGELATCH_UP 40 866 865 1 SOS_SCHEDULER_YIELD 53279 …

2
既存のインデックスに新しいインデックスのすべての列が含まれているのに、なぜこの新しいインデックスを作成するとパフォーマンスが大幅に向上したのですか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 LogテーブルとLogItemテーブルがあります。私は両方からいくつかのデータを取得するクエリを書いています。数千がLogsあり、それぞれLogが最大125まで持つことができますLogItems 問題のクエリは複雑なのでスキップしています(誰かが重要だと思うなら、おそらく投稿できるでしょう)が、SSMS推定クエリプランを実行すると、新しい非クラスタ化インデックスによってパフォーマンスが最大100%向上することがわかりました。 Existing Index: Non-clustered Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified Query Plan Recommendation CREATE NONCLUSTERED INDEX [LogReportIndex] ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified]) 楽しみのために、この新しいインデックスを作成してクエリを実行しましたが、驚いたことに、クエリが実行されるまでに10秒以上かかるのに1秒かかりました。 既存のインデックスがこの新しいクエリをカバーすると想定したので、私のクエリは、新しいクエリで使用される列のみに新しいインデックスを作成するとパフォーマンスが向上するのはなぜですか?where句で使用される列の一意の組み合わせごとにインデックスを作成する必要がありますか? 注:これは、SQL Serverが結果をキャッシュしているためだとは思いません。インデックスを作成する前に約25〜30回クエリを実行しました。以下。
19 sql-server  index 

3
「WHERE 1 = 1」は通常、クエリのパフォーマンスに影響しますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 最近、「where 1 = 1 statement」という質問を見ました。(ホスト言語の観点から)よりクリーンなコードを作成するために、動的SQLの作成によく使用するSQL構成体。 一般的に、SQLステートメントへのこの追加は、クエリのパフォーマンスに悪影響を及ぼしますか?特定のデータベースシステムに関する回答を探しているわけではありません(DB2、SQL Server、MS-Access、およびmysqlで使用しているためです)。

6
インデックスの再編成中にトランザクションログがいっぱいになるのを防ぐ方法
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 トランザクションログのサイズを50 GBに事前に割り当てた複数のマシンがあります。再編成しようとしているテーブルのサイズは55〜60 GBですが、継続的に増加します。私が再編成したい主な理由は、スペースを再利用することであり、それによるパフォーマンス上の利点は追加のボーナスです。 テーブルの断片化レベルは30〜35%です。これらのマシンの一部では、「トランザクションログがいっぱいです」エラーが発生し、再編成が失敗します。トランザクションログのサイズは最大48GBに達します。これに対抗する良い方法は何ですか?自動インクリメントをオンにしていません。これを行うのは嫌です。 ログサイズをより大きな値に増やすことはできますが、将来テーブルサイズが大きくなると、値が十分ではなくなる可能性があります。また、ログサイズを均等に増やしようとすると、スペースを再利用するために再編成を行う目的が無効になります。これに効果的に対処する方法についてのアイデアはありますか?データ損失は許容されないため、バルクモードの使用はオプションではありません。

4
2つのテーブルまたはクエリ間で異なる行を簡単に表示する
同一のデータを持つ/返すことになっている2つの異なるテーブル/クエリがあるとします。これを確認します。次の例のように、各テーブルの一致しない行を表示して、すべての列を比較する簡単な方法は何ですか?テーブルには30個の列があり、その多くがNULL可能であると仮定します。 PKがない場合、またはPKごとに重複がある可能性がある場合、PK列だけで結合するだけでは十分ではなく、NULLを適切に処理する30の結合条件と厄介なWHERE条件でFULL JOINを実行する必要があります一致した行を除外します。 通常、問題が最悪であり、PKが論理的に使用可能になる可能性が非常に低いのは、スクラブされていないデータまたは完全に理解されていないデータに対して新しいクエリを作成するときです。問題を解決する2つの異なる方法を作成し、その結果を比較します。違いは、気づいていないデータの特殊なケースを強調しています。 結果は次のようになります。 Which Col1 Col2 Col3 ... Col30 ------ ------ ------ ------ ------ TableA Cat 27 86 -- mismatch TableB Cat 27 105 -- mismatch TableB Cat 27 87 -- mismatch 2 TableA Cat 128 92 -- no corresponding row TableB Lizard 83 NULL -- no corresponding …

4
sql-serverでデータベースの一部をバックアップおよび復元することは可能ですか?
クライアントサイトからサイトに定期的に転送するsql-server 2005データベースがあります。直接接続がなく、Webベースのファイル転送アプリケーションを介してファイルを転送する必要があるため、これには長い時間がかかります。データベースは現在約10GBですが、すべてのデータを必要とするわけではありません-ほとんどは監査テーブルと、再生成可能な計算値を保持するテーブルにあります。 監査テーブルを保持するファイルグループを作成することを検討しましたが、プライマリファイルグループをバックアップおよび復元できることを望んでいました。うまくバックアップできますが、復元時に同じデータベースに復元していないというエラーが表示されます。ファイルグループを使用して、データベースの一部を別のサーバーに復元することはできますか?これを行うためのより良い方法はありますか?

2
型フィールドのINTまたはCHAR
テーブルまたはTypeフィールドの最適な設計は何ですか?言い換えれば、このスキーマが与えられた場合:intchar(1) create table Car ( Name varchar(100) not null, Description varchar(100) not null, VehType .... not null ) それがために(パフォーマンス的に)、より効率的でVehTypeあることをintかchar(1)?5種類の車があり、0〜4の増分値を使用するか、タイプの文字(たとえば、「v」、「s」、「c」、「t」、「m」)を使用する必要があるとします。 それ以上の場合は、別のTypeテーブルを使用して外部キー関係を作成しますが、その必要性はわかりません。 私がいることがわかりsys.objectsカタログビューが文字使用するtypeフィールドを。その理由はありますか?私はただここで薄い空気をつかんでいますか、それは私がより快適なものですか?

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