データベース管理者

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

1
mydumperの '' --use-savepoints "オプションはメタデータのロックをどのように減らしますか
MyDumper 0.6.1は新しいオプションを追加します--use-savepoints。マニュアルから、それは意味します: セーブポイントを使用してメタデータのロックの問題を軽減します。SUPER権限が必要です 分からない。「メタデータのロックの問題を軽減する」方法と、「SUPER特権」が必要な理由 私が思うに、メタデータは他のDDL変更テーブル構造を防ぐために不可欠です。

3
IF EXISTSクエリでのCTEの使用
SQL Server 2012で次のようなことを行うことはできますか? IF EXISTS ( WITH DATA AS ( SELECT *, ROW_NUMBER() OVER(PARTITION BY column ORDER BY Column) AS rn FROM table ) SELECT * FROM DATA WHERE rn = 2 ) BEGIN ... END この構文を使用しようとすると、エラーが発生しました。これが不可能な場合、一時テーブルを使用することがこれを達成するための最良の方法でしょうか?
8 sql-server  cte 

3
値のいずれかがサブクエリ結果にあるかどうかを確認します
注文IDのリストを返す複雑なサブクエリがあります。これらの注文がある顧客のリストを取得する必要があります。問題は、顧客を注文に割り当てる方法が2つあることです(2つのフィールドのうちの1つ)。私はこのようなことをすることができます: select * from Customers where orderId in (select...) or secondaryOrderId in (select ...) 問題は、サブクエリが実行にかかる時間と画面スペースの両方で非常に大きいことです。いずれかのフィールドに目的の結果が含まれているかどうかを確認する方法はありますか?

3
BLOBのマージレプリケーション中の高tempdbディスクI / O
BLOB(タイプimage)を複製するためのマージパブリケーションがあり、私のデータサイズに対して非常に高いtempdbディスクI / Oを取得しました。パブリケーションはダウンロード専用であり、フィルターはありません。 高いディスクI / Oは同期によって引き起こされ(サブスクライバーが同期していない場合はすべて問題ありません)、サブスクライバーの数と強く相関しています。同期の間にパブリッシャーでデータが変更されていない場合でも発生します。 複製されたテーブルのサイズ:7MB(行の総数は約100) tempdb I / O:書き込み(ログおよびデータファイル)の場合、最大30 MB /秒 サブスクライバーの数:100をわずかに超え、それぞれが30分ごとに(ほぼ均等に)同期しています。 保存期間を14日に設定 パブリッシャーではSQL Server 2008を、サブスクライバーではSQL Server 2005-2008R2を使用します。すべてのサブスクライバーはWeb同期を使用します。 さらに、サブスクライバーでの同期には多くの時間がかかり、replmerg.log次のように複数回発生します。 DatabaseReconciler, 2015/04/21 12:13:40.348, 3604, 25088, S2, INFO: [WEBSYNC_PROTOCOL] Sending client ReconcilerPhase WebSyncReconcilerPhase_RegularDownload DatabaseReconciler, 2015/04/21 12:13:47.063, 3604, 25194, S2, INFO: [WEBSYNC_PROTOCOL] Received server ReconcilerPhase WebSyncReconcilerPhase_LastRegularDownload @stream_blob_columns効果なしで設定のオンとオフを試みた。 質問がある:それは加入者にこれらのブロブを送信するためにマージレプリケーションを使用することをお勧めしますか?tempdbの問題のない大量のデータを含む他のパブリケーション(BLOB列はありません)があります。それはSQL Serverの欠陥ですか、それとも不適切な設定ですか? パブリッシャーとディストリビューターは同じインスタンス、SQL Server …

1
SQL Server 2014-すべてをリセット
ソフトウェアを再インストールする前に、SQLインスタンスを使用して「ゼロから始める」簡単な方法はありますか?つまり、つまり: 作成されたすべてのログオンを削除し、 追加されたデータベースをすべて削除し、 システムデータベースをリセットします。 新しい構成を削除し、 SQL Serverエージェント構成をリセットする オンラインでこれを行う方法は見つかりません。

2
タイムスタンプの範囲(1列)でのクエリの最適化
HerokuでPostgres 9.3を使用しています。 毎日多くの挿入と更新を行う100万件以上のレコードを含む「トラフィック」テーブルがあります。このテーブル全体でさまざまな時間範囲でSUM操作を実行する必要があります。これらの呼び出しには最大40秒かかる可能性があり、それを改善する方法に関する提案を聞きたいです。 このテーブルには次のインデックスが設定されています。 CREATE INDEX idx_traffic_partner_only ON traffic (dt_created) WHERE campaign_id IS NULL AND uuid_self <> uuid_partner; SELECTステートメントの例を次に示します。 SELECT SUM("clicks") AS clicks, SUM("impressions") AS impressions FROM "traffic" WHERE "uuid_self" != "uuid_partner" AND "campaign_id" is NULL AND "dt_created" >= 'Sun, 29 Mar 2015 00:00:00 +0000' AND "dt_created" <= 'Mon, 27 …

2
Microsoft SQL Server 2012ミラーが切断される
Microsoft SQL Server 2012のミラーがいくつかあり、非同期モードでの監視なしで、散発的に切断されます。SQL Server 2012 11.0.5058を実行しています。私が見るミラー側のログを見て BUFの割り当てに失敗しました:FAIL_BUFFER_ALLOCATION 1 たくさんのメモリークラークメッセージがあります エラー:802、重大度:17、状態:0。 バッファープールで利用可能なメモリが不足しています。 エラー:1454、重大度:16、状態:1。 データベースミラーリングは一時停止されます。サーバーインスタンス 'instance'は、データベース 'database'のミラーリングパートナーとして機能していたときに、エラー802、状態0、重大度17を検出しました。データベースミラーリングパートナーは、エラーから自動的に回復して、ミラーリングセッションを再開しようとする場合があります。詳細については、エラーログで追加のエラーメッセージを確認してください。 この一連のイベントの後にミラーが一時停止状態になり、その後切断される理由を確認するために何をチェックすべきかについての助けがあれば幸いです。この後、ミラーを再確立できます。ミラーは数日間問題なく機能し、その後、何度も発生します。

1
SQL Server 2000のすべてのテーブル、ビュー、プロシージャへのアクセス許可を付与する
T-SQLをSQL Server 2000構文で使用して、特定のデータベースのすべてのTABLESおよびVIEWSに対してGRANT SELECT、INSERT、UPDATE、DELETEを実行し、100を超えるオブジェクトのうち2つまたは3つを除外するかなり効率的な方法があるかどうか疑問に思いました。また、すべてのストアドプロシージャに対するEXEC権限を付与できるようにしたいと考えています。 現在、以下のコードを使用して、1つずつ変更しています。約100のテーブルと100のビューに対してこれを行うと、時間がかかりすぎ、GUIでさらに時間がかかります(私が間違っている場合を除きます)。 use [DATABASE_NAME] GO GRANT DELETE ON [dbo].[table_name]TO [user_name] GO use [DATABASE_NAME] GO GRANT INSERT ON [dbo].[table_name]TO [user_name] GO use [DATABASE_NAME] GO GRANT SELECT ON [dbo].[table_name]TO [user_name] GO use [DATABASE_NAME] GO GRANT UPDATE ON [dbo].[table_name]TO [user_name] GO T-SQLを使用して、すべてのユーザーテーブルとビューを循環させ、カップルオブジェクトを除外しながら特定の特権を付与するにはどうすればよいですか?

1
SQL Server、TOP対ROW_NUMBER
私は実行計画について学び、さまざまなクエリを試し、それらのパフォーマンスを比較して、これに遭遇しました: SELECT StatisticID FROM ( SELECT StatisticID, ROW_NUMBER() OVER (ORDER BY StatisticID) AS rn FROM FTCatalog.Statistic ) AS T WHERE T.rn <= 1000 ORDER BY rn SELECT TOP 1000 StatisticID FROM FTCatalog.Statistic ORDER BY StatisticID どちらも同じ結果セットを返しますが、最初の方が実行速度が速く、リソースの消費量も少なくなります(少なくともSSMSはそれを教えてくれます)。ここでは実行計画を示します。 SQLクエリプランエクスプローラーとの比較: 実際に舞台裏で何が起こっているのか、なぜ結果が異なるのかについて誰かに洞察を与えることはできますか?他に必要なものがあれば、お知らせください。 ありがとう、エヴァルダス。

1
共有ドライブでのファイルの初期化
以前にこれと似たような質問をしましたが、以前はバックアップを共有の場所に移動することについて質問していました。今回は気になります。共有ドライブにデータベースを復元する場合、そのサーバーまたはSQL Serverを実行しているサーバーだけでIFIを有効にする必要がありますか? 私が尋ねる理由は、かなり大きなデータベースを復元していて、過去2、3時間は100%で停止してしまったためです。の待機タイプsp_whoisactiveは次のとおりです。 (28472716ms) `PREEMPTIVE_OS_WRITEFILEGATHER. 私が見たのは、IFIがオンになっていないときだけですが、SQL Serverでは有効になっていますが、共有ドライブサーバーでは有効になっていません。

2
psqlと--disable-triggersを使用したプレーンテキストのpg_dumpの復元
テーブルの「レガシー」データを更新するために、短いスクリプトでいくつかのテストを実行する必要がありました。 私は慎重で、テストされていないスクリプトを使用して、その前に関連テーブルをバックアップすることにしました。これを行う最も簡単な方法は次のとおりです。 pg_dump -a --file table.sql -t table database 今、私は自分がしなければならないことをし、結果を確認しましたが、それらはかなり満足のいくものではありませんでした。私は自分自身に考えました。そのテーブルのバックアップを作成することは、どれほど幸運かです。 私がテーブルをバックアップしたとき、私はすでに警告されていました: pg_dump: NOTICE: there are circular foreign-key constraints among these table(s): pg_dump: table pg_dump: You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints. pg_dump: Consider using a full dump instead of a …

7
リモートMySQL接続が失敗する(10060)-「domainname.com(10060)上のMySQLサーバーに接続できません」
VB6でアプリケーションを開発し、アプリケーションのデータを保存するためにオンラインのMySQLデータベースサーバーを使用しています。 初めてデータベースサーバーに接続しようとしたときは成功しましたが、アプリケーションを閉じて再起動した後、次のようになります。 MySQLサーバーに接続できません(10060) " しばらくして(約30分)、データベースに再び正常に接続できます。 すべてのMySQLシステムおよびconnection_timeout、wait_timeoutなどのグローバル変数に最大値を指定しました。 MySQLユーザーにすべての権限を付与しました。 コンピュータのファイアウォールがオフになっています。 アプリケーションを閉じると、すべての接続が適切に閉じられます。 オンラインMySQLデータベースサービスを提供する技術者に尋ねたところ、次の3つの理由がわかりました。 接続しようとしているローカルマシンがサーバーでホワイトリストに登録されていません。 ユーザーの最大接続数を超えました。 MySQLサーバーはその時点でダウンしていました(ただし、サーバーはダウンしていないとのことです)。 最初の2つの理由を解決する方法、またはそれらが問題の原因であると判断する方法を教えてください。または、そこにリストされていない別の問題があるのでしょうか?

1
CASEステートメントのnull値
私は70-461試験に向けて勉強しているときにSSMSでいくつかのことをさらに学習するために遊んでいて、少しハングアップに遭遇しました。私は、いじくり回すためのテーブルを作成しようとしているので、AdventureWorksまたはTSQL2012データベースで既に作成されているテーブルを変更/削除する必要はありません。実際に使用するテーブルを作成する前に、コードをテストするための一時テーブルを作成しました。これは、テーブルに値を挿入するために使用するコードです。 DECLARE @i INT = 1 WHILE @i < 10 BEGIN INSERT INTO #TestEmployeeCountry VALUES ( SUBSTRING('ABCDEFGHIJKLMNOP', @i, 1), CASE (SELECT ABS(CHECKSUM(NEWID()))%10 +1) WHEN 1 THEN 'USA' WHEN 2 THEN 'CANADA' WHEN 3 THEN 'MEXICO' WHEN 4 THEN 'UK' WHEN 5 THEN 'FRANCE' WHEN 6 THEN 'SPAIN' WHEN 7 THEN …

2
ジョブステップの出力全体を確認するにはどうすればよいですか?
かなり長い出力を作成するPowerShellを実行するSQLエージェントジョブがあります(とりわけrobocopy出力があります)。 SQLエージェントジョブ履歴では、この出力の最初の1,000文字程度しか表示されません。 出力全体を表示できる別の場所はありますか? 完全な出力を表示するために使用する必要がある別のアプローチはありますか?

1
SQL Serverのページの期待寿命が高すぎることはありますか?
SQL ServerのPage Life Expectancyと、それが何を意味し、どのような情報からそれを収集できるかについて、いくつかの記事を読みました。私が読んだこれらの記事のほとんどでは、一般的で健全なPLE値は、約1000〜2000秒です。約300秒に達すると、RAMが少なくなる可能性があることを読んだことがあります。 最近、ハードウェアをアップグレードして、RAMを64 GBにしました(14 GBから)。14GBでは、私のPLEは約300秒で、1秒あたり5〜6回のメモリ許可が保留されていました。それで、それは悪いことであり、RAMを増やしました。今、私のPLEははるかに高く、約5000秒であり、保留中のメモリ許可はありません。思い出せば7000秒見たよ。これは私が読んだ何よりもはるかに高いです。 高いPLEは悪いことですか?それとも高いほど良いですか? 編集:すみません、私のPLEは7000秒ではなく、70,000秒でした!ただ、現時点では7000程度まで下がっています。 データベースのサイズは約160GBです。いくつかのテーブルには500万以上の行があります。 max_server_memory は2147483647に設定されています。

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