データベース管理者

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

1
フルテキスト:複数のフルテキストインデックスが作成された後、多数のFT_MASTER_MERGEがSUSPENDED状態で待機します(サーバーがハングします)
10個のデータベース、各データベースに100個の異なるスキーマ、各スキーマに10個の小さな(約50行)テーブル(合計で10K個のテーブル)があり、これらすべてにフルテキストインデックスを作成したときに、SQL Server 2014でテストを行いましたこれらすべてのデータベースのテーブルを同時に。 数分後に、SQL Serverが接続(ADMIN:.接続以外)を受け入れるために停止したことがわかりました。サーバーを再起動すると接続できますが、しばらくするとハングします。いくつかの調査の後、我々は、それがすべての作業スレッドを消費によって引き起こされることを見出し、dm_os_tasksおよびdm_os_waiting_tasksロットがあることを私たちに示したFT_MASTER_MERGEで待機SUSPENDED状態。「フルテキストはマスターマージ操作を待機しています」とグーグル検索しましたが、それに関する実際の情報は見つかりませんでした。 さまざまなフルテキストカタログ構成を試しました。DBごとに1つのカタログ、スキーマごとに1つのカタログ、インデックスごとに1つのカタログです。とにかく、サーバーはこれらすべての中断されたタスクでハングします。 待機の根本的な原因は何ですか?これをどのように修正/緩和できますか? そして、そのような大量のテーブルでフルテキストを有効にするための推奨される方法は何ですか?

2
ほとんどのクエリプランは過去4時間に再作成されました
SQL Serverデータベースのパフォーマンスに問題があります。このツールsp_BlitzCacheを見つけました。コマンドの実行後、次のステートメントが得られました。 過去24時間に92.00%のプランが作成されており、過去4時間に92.00%のプランが作成されています。 問題を特定しましたが(SQL Server Profilerを使用して、StmtRecompileイベントの発生を確認しました)、頻繁に再構築される少数の全文検索クエリのみを見つけることができました。ただし、全文検索クエリは、全クエリの約5%にすぎません。 残りの87%のプランを再現する原因となる提案はありますか? SQL Server 2012(バージョン11.0.6567.0)を持っています。 編集:パフォーマンスカウンターを追加しました +---------------------------+--------------------------------+--------------+ | object_name | counter_name | cntr_value | +---------------------------+--------------------------------+--------------+ | SQLServer:Buffer Manager | Background writer pages/sec | 0 | | SQLServer:Buffer Manager | Buffer cache hit ratio | 28436 | | SQLServer:Buffer Manager | Buffer cache hit ratio base …

2
SQL Server TDEを使​​用してリモートバックアップを書き込むときに、ネットワークトラフィックは暗号化されますか?
彼らは「愚かな質問」などはないと言っているので、ここに行く: SQL Serverの透過的データ暗号化(TDE)が保存データを暗号化し、誰かがストレージに侵入してそれらのファイルを盗んだ場合にデータベースファイル(.mdf)とバックアップファイル(.bak)が暗号化されることを理解しています。また、ディスクから読み取ったときにデータが復号化され、メモリ内で(暗号化されて)暗号化されないことも理解しています。したがって、リモートクエリ(select * from SensitiveData)を実行しているユーザーによって要求されたデータは、ネットワーク上を移動するときに暗号化されないため、傍受されやすくなります。 したがって、上記のすべてが正しいと仮定すると、ここで私の愚かな質問があります:SQL ServerインスタンスがコンピューターAにあり、TDEデータベースのバックアップがリモートコンピューターBのストレージに書き出されている場合、バックアップ操作データは転送元として暗号化されますか?コンピューターAはコンピューターBのディスクに書き込まれますか?(暗号化操作は最初にコンピューターAで行われると想定しているため)必要があると思いますが、Microsoftのドキュメントやブログでこれの確認を見つけることができません。同様に、復元操作中に–コンピュータBのディスクから転送されているデータを傍受して、コンピュータAのデータベースを復元する人はいますか–暗号化されたデータが暗号化されているのを見つけましたか?

1
トランザクションログを切り捨てることができません、log_reuse_wait_desc-AVAILABILITY_REPLICA
今朝、私はデータベースの1つでトランザクションログが一杯になったという警告に目覚めました。このサーバーは、常時接続のクラスターであり、トランザクションレプリケーションサブスクライバーでもあります。log_reuse_wait_descを確認したところ、logbackupが表示されました。4日前に誰かが誤ってlogbackupジョブを無効にしていたため、ログバックアップジョブを再度有効にしたところ、ログがクリアされました。午前4時だったので、その朝遅くにオフィスに行って、ログが400GBに達したときにログを鳴らそうと思いました。 午前10時-オフィスにいて、縮小する前にログの使用状況を確認したところ、約16%でした。私は驚いて、複製を示したlog_reuse_wait_descを確認しました。これがレプリケーションサブスクライバーだったため、混乱しました。次に、dbがCDCに対して有効になっていることがわかり、それが原因である可能性があるため、CDCを無効にすると、log_reuse_wait_descにAVAILABILITY_REPLICAが表示されます。 一方、ログの使用量は着実に増加しており、現在は17%です。alwaysonダッシュボードを確認し、送信済みキューとやり直しキューを確認しましたが、どちらもほぼゼロです。ログの再利用がAVAILABILITY_REPLICAと表示され、ログをクリアできない理由がわかりません。 なぜこれが起こっているのでしょうか?

3
1つの列でDISTINCTを実行し、TOP行を返します
最大の顧客3人をどのようにクエリしますPurchase_Costか? DISTINCTonのみを適用したいのですCustomer_Nameが、以下のクエリは3つの列すべてに個別を適用します。クエリを変更して目的の出力を取得するにはどうすればよいですか? SELECT DISTINCT TOP 3 customer_name, order_no, Purchase_Cost FROM PurchaseTable ORDER BY Purchase_Cost

4
SET TRANSACTION ISOLATION LEVEL SERIALIZABLEの後にコミットされた読み取りを追加しますか?
ストアドプロシージャの内部には、次のものがあります。(SQL Server 2008) SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION getStuff BEGIN TRY /* some selects, updates, etc, etc. */ .... COMMIT TRANSACTION getStuff END TRY BEGIN CATCH ... END CATCH これはトランザクションベースであるため、残りのデータベース接続はSERIALIZABLEの影響を受けないだろうと私は考えました。 コミット後にコミットされた読み取りに暗黙的に分離レベルを設定する必要がありますか?これは、アプリケーションサーバーとデータベースサーバー間の他の接続に悪影響を及ぼしますか?

5
インラインビューとWITH句の違いは何ですか?
インラインビューを使用すると、サブクエリから別のテーブルのように選択できます。 SELECT * FROM /* Selecting from a query instead of table */ ( SELECT c1 FROM t1 WHERE c1 > 0 ) a WHERE a.c1 < 50; これは、インラインビュー、WITH句、CTE、派生テーブルなど、さまざまな用語を使用して言及されているのを見てきました。私には、同じものに対して異なるベンダー固有の構文があるようです。 これは間違った仮定ですか?これらの間に技術/パフォーマンスの違いはありますか?

1
リンクされたSQL Serverにはどのような大きな制限が予想されますか?
当社の製品は、Microsoft SQL Serverに基づいています。現在、3つのデータベースを使用しており、常に1つのSQL Serverインスタンスに展開しています。 3つのデータベースは、OLTP、OLAP、および監査です。OLAPデータベースには、クロスデータベースクエリを使用して、OLTPと監査の両方からのEODに関する大規模な受信データがあります。 ご質問 これらの3つのデータベースを単一の物理サーバー内の3つの別々のStandard Edition インスタンスに展開し、SQL Serverのリンクサーバー機能を使用してそれらをバインドするとします。 アプリケーションコードに対してどの程度透過的ですか?どのくらいの変化を期待できますか? OLAPへのインバウンドデータの量は5万〜10万行で、EODあたりのペイロードは200〜500 MBでした。どのくらいのパフォーマンス低下が予想されますか? 他にどんな大きな制限を期待する必要がありますか? バックグラウンド 現在、最初の潜在的なクライアントを500人以上の同時ユーザーに売り込んでいます。 64コアと256GB RAMを含むサーバー仕様を作成しています。SQL Serverがこれらの豊富なリソースをすべて利用するには、クライアントはEnterprise Editionを購入する必要があります。EnterpriseEditionは、SQL Server 2016ではコア単位のライセンスでのみ利用できます。 ライセンス費用だけ(64 x $ 7400)でそれらが下がることを恐れています。したがって、データベースをStandard Editionの3つのインスタンスに分割し、それらをリンクして、リンク機能がアプリケーションコードから透過的になることを期待しています。

2
カラムファミリのポイントは何ですか?
RocksDBのようなNoSQLデータベースシステムが列ファミリーと呼ばれる機能を提供しているのを見てきました。概念が何を意味するかは理解していると思いますが、それらを使用することの実際の(実用的な)利点は何ですか?少なくとも場合によっては、ルックアップのパフォーマンス、またはキーと値の全体の空間局所性を改善できると思いますか?しかし、私が理解している限り、データベースアクセスの実際のセマンティクスには影響しないようです。これは正しいです?行方不明のものはありますか?
9 nosql 

4
MySQLを介して半径でzipを取得する際の問題
各郵便番号の中央の緯度と経度を含む郵便番号の表があります。私はそれを使用して、任意のポイントから半径1マイル以内の郵便番号のリストを取得します。 ジッパーの中心点が特定の半径内にないからといって、ジップ自体が半径内にないということにはならないということが、私に思い浮かんだばかりです。 超高度なアートスキルを使用して、ここでポイントを説明しました。 緑のストライプのブロブは、郵便番号A、B、Cを表しています。 赤い汚れは各郵便番号の地理的中心です フクシアドットはターゲットの場所です。 でこぼこの青い円は、ターゲットの場所から半径1マイルです。 ピンク色の汚れから半径1マイル以内のすべての郵便番号に対してクエリを実行すると、ピンク色の汚れ自体であっても、郵便番号BとCのみが返されます。郵便番号Aの中心点は半径1マイル以内にないためです。明らかに郵便番号Aです。 SELECT *, p.distance_unit * DEGREES(ACOS(COS(RADIANS(p.latpoint)) * COS(RADIANS(z.y)) * COS(RADIANS(p.longpoint) - RADIANS(z.x)) + SIN(RADIANS(p.latpoint)) * SIN(RADIANS(z.y)))) AS dist FROM standard_zip AS z JOIN ( /* these are the query parameters */ SELECT $lat AS latpoint, $lng AS longpoint, $miles AS radius, 69 AS …

3
CLRを使用せずにデータベースレベルの定数(列挙)を作成しますか?
要求の望ましい状態に基づいて代替アクションを実行する必要があるいくつかのSQLオブジェクトがあります。ストアドプロシージャ、テーブル値関数に渡し、クエリで使用できる(CLRを使用せずに)データベースレベルの定数(列挙)を作成する方法はありますか? CREATE PROCEDURE dbo.DoSomeWork(@param1 INTEGER, ..., @EnumValue myEnumType) AS ...; そしてそれを使います: EXEC doSomeWork 85, ..., (myEnumType.EnumValue1 + myEnumType.EnumValue2); myEnumTypeいくつかの列挙値を保持する場所。 手順では、必要な作業を実行するために、@EnumValue値を使用してテストすることができますmyEnumType。私がmyEnumType検討しているケースでは、ビットマスクの値を作成します。 簡単な例として、巨大なデータセットを受け取り、それをより小さくても非常に大きなデータセットに削減する高価なプロセスを考えてみます。このプロセスでは、そのプロセスの途中で、結果に影響を与える調整を行う必要があります。これは、削減内の中間計算のステータスに基づいて、特定のタイプのレコードをフィルターする(またはフィルターする)とします。@EnumValueタイプのはmyEnumType、このために、テストに使用することができ SELECT ... FROM ... WHERE (@EnumValue & myEnumType.EnumValue1 = myEnumType.EnumValue1 AND ...) OR (@EnumValue & myEnumType.EnumValue2 = myEnumType.EnumValue2 AND ...) OR ... CLRを使用せずに、SQL Serverでこのようなデータベースレベルの定数を使用できますか? ストアドプロシージャや関数などにパラメーターとして渡すことができるデータベースレベルの列挙または定数のセットを探しています。

1
テーブル全体のクエリで使用されていないパーティションのインデックスに関する統計
次の結合では、パーティションで結合を行う場合とテーブル全体で結合する場合の行の見積もりが大きく異なります。 CREATE TABLE m_data.ga_session ( session_id BIGINT NOT NULL, visitor_id BIGINT NOT NULL, transaction_id TEXT, timestamp TIMESTAMP WITH TIME ZONE NOT NULL, day_id INTEGER NOT NULL, [...] device_category TEXT NOT NULL, [...] operating_system TEXT ); すべてのパーティション: CREATE TABLE IF NOT EXISTS m_data.ga_session_20170127 ( CHECK (day_id = 20170127) ) INHERITS (m_data.ga_session); …

1
COALESCEは今でも検索可能ですか?
私の開発者の1人は、これCOALESCE(column, default value) = default valueが現在は反論の余地があると主張しています。そうですか? 私は次のテストを実行しましたが、それがCOALESCE反論できないことを意味すると思います。 USE tempdb; SELECT @@VERSION; -- Microsoft SQL Server 2016 (RTM-CU3-GDR) (KB3194717) - 13.0.2186.6 (X64) Oct 31 2016 18:27:32 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows 10 Pro 6.3 <X64> (Build 14393: ) (Hypervisor) CREATE TABLE Test ( ID int primary key …

1
永続的な計算された列が原因でスキャン
通常の列を永続的な計算列に変換すると、このクエリでインデックスシークを実行できなくなります。どうして? 2016 SP1 CU1を含むいくつかのSQL Serverバージョンでテストされています。 レプロス 計算された列 通常の列 問題はtable1、col7です。 テーブルとクエリは、オリジナルの部分的な(そして簡略化された)バージョンです。クエリが別の方法で書き直される可能性があることは承知しており、何らかの理由で問題を回避しますが、コードに触れないようにする必要がありtable1ます。 ポールホワイトが示したように(ありがとう!)、シークは強制された場合に利用可能になるため、オプティマイザによってシークが選択されない理由と、シークを変更することなく、必要に応じてシークを実行するために別の方法を実行できるかどうかが問題になります。コード? 問題のある部分を明確にするために、不良な実行計画の関連するスキャンを以下に示します。

4
SQL Serverを停止する理由は何ですか?
私が読んだのは、コールドキャッシュを作成してメモリを消費するため、SQL Serverを停止することがどの程度の損害をもたらすかについてです。では、なぜSQL Serverを停止したいのでしょうか。私がこれについてもっと読むことができるように記事へのリンクを提供できるなら、私は本当にそれを感謝します! この質問は私の先生によって提起されました。トリックの質問でない限り、私は完全に困惑しています。彼の正確な質問は: インターネットを使用して調査を行い、SQL Serverを停止する理由を学びます。あなたの答えを説明しなさい。 これは、SQL Server 2008 R2の使用方法を調査している状況でした。彼が明白な答えを求めているのか、それとも私が見逃しているものがあるのか​​はわかりません。

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