データベース管理者

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

1
sys.dm_exec_sessionsの「reads」列は実際には何を示していますか?
これは非常に基本的な質問のように思えるかもしれませんが、実際にそうである必要があります。ただし、科学的手法のファンとして、私は仮説を立て、それをテストして自分が正しいかどうかを確認するのが好きです。この場合、私はの出力sys.dm_exec_sessions、より具体的には、単一列の「読み取り」をよりよく理解しようとしています。 SQL Server Books Onlineでは、これを次のように明確に指定しています。 このセッション中に、このセッションのリクエストによって実行された読み取りの数。null可能ではありません。 これは、セッションの開始以降、このセッションによって発行された要求を満たすためにディスクから読み取られたページの数を示していると考えられます。これは私がテストしようと思った仮説です。 logical_reads同じテーブルの列は次のように定義されます。 セッションで実行された論理読み取りの数。null可能ではありません。 SQL Serverの使用経験から、この列はディスクとメモリの両方から読み取られたページ数を反映していると思います。つまり、ページがどこにあるかに関係なく、セッションでこれまでに読み取られたページの総数です。同様の情報を提供する2つの別々の列を持つことの差別化要因、つまり価値命題は、特定のセッションでディスクから読み取られたページ()とバッファキャッシュから読み取られたページ()の比率を理解できるように思われるでしょう。readslogical_reads 私のテストリグでは、新しいデータベースを作成し、既知のページ数のデータを含む単一のテーブルを作成してから、新しいセッションでそのテーブルを読み取りました。次にsys.dm_exec_sessions、readsとのlogical_readsコラムがセッションについて何を言っているかを確認しました。この時点で私は結果に困惑しています。おそらくここにいる誰かが私にこれについていくつかの光を当てることができます。 テストリグ: USE master; IF EXISTS (SELECT 1 FROM sys.databases d WHERE d.name = 'TestReads') BEGIN ALTER DATABASE TestReads SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE TestReads; END GO CREATE DATABASE TestReads; GO ALTER DATABASE TestReads SET RECOVERY SIMPLE; …

4
YAML構成ファイルの解析エラー:yaml-cpp
MongoDBシェルバージョン3.0.7で次のコマンド(Windowsマシン)を使用しています。 mongod --config "G:\NodeApps\mongod.cfg" --install mongod.cfgファイルの内容を以下に示します。 systemLog: destination: file path:"G:\NodeApps\data\log" storage: dbPath:"G:\NodeApps\data" 以下のエラーを取得: Error parsing YAML config file: yaml-cpp: error at line 4, column 8: illegal map value try 'mongod --help' for more information 同様の質問にはこれに対する解決策がありません。 私がすでに試したこと: スペースを使用しています(タブではありません) Mongod設定ファイルは非ACSII形式で保存してはいけないという投稿の1つで言及されているように、ファイルをASCII形式で保存してみました。UTF-8でもです。 これで私を助けてください。

3
空のテーブルをクエリするアプリケーション
私の会社では、かなり大きなパフォーマンスの問題があるアプリケーションを使用しています。データベース自体には多くの問題がありますが、私が取り組んでいるところですが、問題の多くは純粋にアプリケーションに関連しています。 私の調査では、空のテーブルをクエリする何百万ものクエリがSQL Serverデータベースにヒットしていることがわかりました。約300の空のテーブルがあり、それらのテーブルの一部は1分あたり最大100〜200回クエリされます。テーブルは私たちのビジネス領域とは何の関係もなく、基本的に元のアプリケーションの一部であり、ベンダーが私たちのためにソフトウェアソリューションを作成するように契約したときにベンダーが削除しませんでした。 アプリケーションエラーログがこの問題に関連するエラーであふれていると思われるという事実は別として、ベンダーは、アプリケーションまたはデータベースサーバーのいずれにもパフォーマンスまたは安定性の影響がないことを保証します。エラーログは、診断を行うために2分を超える価値のあるエラーが表示されない程度にフラッディングされます。 これらのクエリの実際のコストは、CPUサイクルなどの点で明らかに低くなります。しかし、SQL Serverとアプリケーションにどのような影響があるかを誰かが示唆できますか?リクエストの送信、確認、処理、返送、アプリケーションによる受信確認の実際のメカニズム自体がパフォーマンスに影響を与えると思います。 アプリにはSQL Server 2008 R2、Oracle Weblogic 11gを使用しています。 @ Frisbee-短い話ですが、アプリのデータベースの空のテーブルにヒットするクエリテキストを含むテーブルを作成し、空であることがわかっているすべてのテーブル名についてクエリを実行し、非常に長いリストを取得しました。トップヒットは30日間の稼働時間で270万回の実行でした。アプリは一般的に午前8時から午後6時まで使用されているため、これらの数値は運用時間に集中しています。複数のテーブル、複数のクエリ、おそらく結合を介した関連性の高いものとそうでないもの。トップヒット(当時は270万)は、結合のないwhere句を使用した単一の空のテーブルからの単純な選択でした。空のテーブルへの結合を伴うより大きなクエリにはリンクテーブルの更新が含まれる可能性があると予想しますが、それを確認してこの質問をできるだけ早く更新します。 更新:1043から4622614(2.5か月以上)の実行数のクエリが1000個あります。キャッシュされたプランがいつから始まったかを調べるために、さらに掘り下げる必要があります。これは、クエリの範囲を把握するためのものです。ほとんどは、20を超える結合でかなり複雑です。 @ srutzky-はい、計画がいつコンパイルされたかに関連する日付列があると思いますので、それを確認してみましょう。SQL ServerがVMwareクラスター上にある場合、スレッドの制限が要因になるのでしょうか。ありがたいことに、すぐに専用のDell PE 730xDになります。 @Frisbee-返信が遅くなってすみません。あなたが示唆したように、SQLQueryStress(実際には240,000回の反復)を使用して、空のテーブルからselect *を24スレッドで10,000回実行し、10,000バッチリクエスト/秒をすぐにヒットしました。その後、24スレッドで1000倍に削減し、4,000バッチリクエスト/秒未満でヒットしました。また、12スレッドのみで10,000回の反復を試行し(合計120000回の反復)、これにより、持続的な6,505バッチ/秒が生成されました。CPUへの影響は実際に顕著で、各テスト実行中の合計CPU使用量の約5〜10%です。ネットワーク待機はごくわずかでした(私のワークステーション上のクライアントで3ミリ秒など)が、CPUへの影響は確かにありました。それは、CPU使用率と、不要なデータベースファイルIOに要約されます。1秒あたりの合計実行回数は3000弱で計算され、これは本番環境ではありませんが、このような数十のクエリの1つだけをテストしています。したがって、毎分300〜4000回の割合で空のテーブルにヒットする何百ものクエリの正味の影響は、CPU時間に関しては無視できません。すべてのテストは、デュアルフラッシュアレイと256GB RAM、12個の最新コアを備えたアイドル状態のPE 730xDに対して行われました。 @ srutzky-良い考え。SQLQueryStressはデフォルトで接続プールを使用しているようですが、とにかく調べてみたところ、接続プールのボックスがオンになっていることがわかりました。フォローして更新 @ srutzky-アプリケーションで接続プーリングが有効になっていないようです-有効になっている場合は機能していません。プロファイラートレースを実行したところ、接続に監査ログインイベント用のEventSubClass "1-Nonpooled"があることがわかりました。 RE:接続プーリング-weblogicsをチェックしたところ、有効な接続プーリングが見つかりました。プーリングのトレースをさらに実行し、プーリングの兆候が正しく/まったく発生していないことを発見しました: 次に、データが設定されたテーブルに対して結合を使用せずに単一のクエリを実行すると、次のようになります。例外は、「SQL Serverへの接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったか、アクセスできませんでした。インスタンス名が正しく、SQL Serverがリモート接続を許可するように構成されていることを確認してください。 (プロバイダー:名前付きパイププロバイダー、エラー:40-SQL Serverへの接続を開けませんでした) "バッチリクエストカウンターに注意してください。例外が生成されている間にサーバーにpingを実行すると、ping応答が成功します。 更新-2つの連続するテスト実行、同じワークロード(select * fromEmptyTable)、プーリング有効/無効。CPU使用率がやや多く、多くの障害が発生し、500バッチリクエスト/秒を超えることはありません。テストでは、10,000バッチ/秒でプールがオンの場合の障害はなく、約400バッチ/秒の場合、プールが無効になっているために多くの障害が発生しています。これらの失敗は接続の可用性の欠如に関連しているのだろうか? @ srutzky- sys.dm_exec_connectionsからCount(*)を選択します。 プーリングが有効:負荷テストが停止した後でも37が一貫して 無効化されたプーリング: SQLQueryStressで例外が発生しているかどうかに応じて11-37。つまり、これらの谷がBatches / secグラフに表示されると、SQLQueryStressで例外が発生し 、接続数が11に減少し、その後37に徐々に戻ります。バッチがピークに達し、例外が発生していないとき。とても面白いです デフォルトの0に設定されている両方のテスト/ライブインスタンスの最大接続数。 アプリケーションログを確認しても接続の問題は見つかりませんが、エラーの数とサイズが多いため、利用できるログ記録は数分しかありません。つまり、スタックトレースエラーがたくさんあります。アプリサポートの同僚は、接続に関連してかなりの数のHTTPエラーが発生するとアドバイスしています。これは、何らかの理由でアプリケーションが正しく接続をプールしておらず、その結果、サーバーが繰り返し接続を使い果たしているように思われます。アプリのログを詳しく調べます。これがSQL …

4
別の列に基づいて積算合計をリセットする
現在の合計を計算しようとしています。ただし、累積合計が別の列の値よりも大きい場合はリセットする必要があります create table #reset_runn_total ( id int identity(1,1), val int, reset_val int, grp int ) insert into #reset_runn_total values (1,10,1), (8,12,1),(6,14,1),(5,10,1),(6,13,1),(3,11,1),(9,8,1),(10,12,1) SELECT Row_number()OVER(partition BY grp ORDER BY id)AS rn,* INTO #test FROM #reset_runn_total インデックスの詳細: CREATE UNIQUE CLUSTERED INDEX ix_load_reset_runn_total ON #test(rn, grp) サンプルデータ +----+-----+-----------+-----+ | id | val | reset_val …

1
報告されたインデックスサイズと実行プランのバッファ数の大きな不一致
問題 次のようなクエリがあります SELECT COUNT(1) FROM article JOIN reservation ON a_id = r_article_id WHERE r_last_modified < now() - '8 weeks'::interval AND r_group_id = 1 AND r_status = 'OPEN'; (10分後に)タイムアウトになることが多いため、この問題を調査することにしました。 EXPLAIN (ANALYZE, BUFFERS)出力は次のようになります。 Aggregate (cost=264775.48..264775.49 rows=1 width=0) (actual time=238960.290..238960.291 rows=1 loops=1) Buffers: shared hit=200483 read=64361 dirtied=666 written=8, temp read=3631 written=3617 I/O Timings: …

3
フィルタリングされたインデックスは、フィルタリングされたパーツがWHEREではなくJOINにある場合にのみ使用されます
以下のフィルターされたインデックスを作成しましたが、2つのクエリをさらに実行すると、このインデックスは、where句ではなく、JOINにEND_DTTMがある最初の例のシークにのみ使用されます(クエリの唯一の違いです)。 。なぜこれが起こるのか誰かが説明できますか? インデックスの作成 CREATE NONCLUSTERED INDEX [ix_PATIENT_LIST_BESPOKE_LIST_ID_includes] ON [dbo].[PATIENT_LIST_BESPOKE] ( [LIST_ID] ASC, [END_DTTM] ASC ) WHERE ([END_DTTM] IS NULL) クエリ DECLARE @LIST_ID INT = 3655 --This one seeks on the index SELECT PATIENT_LISTS.LIST_ID FROM DBO.PATIENT_LISTS LEFT JOIN DBO.PATIENT_LIST_BESPOKE ON PATIENT_LISTS.LIST_ID = PATIENT_LIST_BESPOKE.LIST_ID AND PATIENT_LIST_BESPOKE.END_DTTM IS NULL WHERE PATIENT_LISTS.LIST_ID = @LIST_ID …

1
SQL Serverの強く型付けされたxml要素の値をXQueryに置き換えます
XMLスキーマコレクション内で次のように定義された要素を指定します。 <xsd:element name="xid"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="32" /> </xsd:restriction> </xsd:simpleType> </xsd:element> XQueryを使用して要素をどのように更新しますか? 要素は、スキーマコレクションのns名前空間内にあります。以下のクエリで要素を更新しようとしています: update cm.item set data.modify( 'declare namespace ns="http://www.anon.com"; replace value of (/ns:*/ns:xid)[1] with "X00011793" cast as element(ns{http://www.anon.com}:xid,#anonymous) ?') where id = 11793 しかし、これは次のエラーを生成します: メッセージ9301、レベル16、状態1、行2 XQuery [cm.item.data.modify()]:このバージョンのサーバーでは、「としてキャスト」は使用できません。「としてキャスト」を使用してください 構文。 キャストを完全に削除してこのクエリを使用する場合: update cm.item set data.modify( 'declare namespace ns="http://www.anon.com"; replace value …

3
SQLサーバー:巨大なテーブルのフィールドを小さなチャンクで更新:進行状況/ステータスを取得する方法?
非常に大きな(1億行)テーブルがあり、その上のいくつかのフィールドを更新する必要があります。 ログシッピングなどの場合も、一口サイズのトランザクションを維持する必要があります。 以下はトリックを行いますか? そして、どのようにして出力を印刷して、進行状況を確認できますか?(そこにPRINTステートメントを追加しようとしましたが、whileループ中に何も出力されませんでした) コードは次のとおりです。 DECLARE @CHUNK_SIZE int SET @CHUNK_SIZE = 10000 UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01' where deleted is null or deletedDate is null WHILE @@ROWCOUNT > 0 BEGIN UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01' where deleted is null or …
10 sql-server  t-sql 

1
SQL Serverデータフォルダーのアクセス権
SQL Server 2014の新規インストールを行いました。次に、以前のSQL Server 2012サーバーからいくつかのデータベースをアタッチしたいと思いました。私はすべてのコピーmdfとldfデータディレクトリにファイルを、私はそれらを添付しようとしたとき、私はこのエラーメッセージが表示されました: 物理ファイル 'D:\ SQLSERVERDATA \ MSSQL12.BIDEV \ MSSQL \ DATA \ controlling_demo.mdf' を開くか作成しようとしたときに、CREATE FILEでオペレーティングシステムエラー5(アクセスが拒否されました)が発生しました。 (Microsoft SQL Server、エラー:5123) ファイルのセキュリティ設定(ファイル、プロパティ、セキュリティを右クリック)を確認したところ、読み取り権限がないと表示されました。ファイルのコピーに使用したアカウントは、管理者グループに属しています。私はDATAフォルダを完全に制御できますが、そこにコピーしたファイルだけが制限されています。 フォルダ全体にセキュリティ権限を再適用しようとすると、次のように表示されます。 コンテナ内のオブジェクトを列挙できませんでした。アクセスが拒否されました。 ファイルを別の場所にコピーすると、アクセス権が与えられます。 質問は、DATAフォルダー内のこれらのファイルへのアクセス権を取得するにはどうすればよいですか?

2
MySQLのインストールに関する問題
まず第一に、長さを失い、この投稿は非常に長く、ある程度の背景が必要です。ノイズからの信号を見分けるのは私にとって困難でした。これの一部が関連していない場合はご容赦ください。 数週間前、私は自発的にWindows 10へのアップグレードを選択しました。その後、最終的に、不要になったPythonのインストールを削除することにしました。最新の2.7(および3.4​​.3のみ)を削除した後、コンピューターが予期せずクラッシュするまで、すべてが問題なく動作するように見えました。それ以来、Windows 10は決して同じではなく、非常に信頼性が低くなりました。 起動時にWindows 7にダウングレードすることを余儀なくされました。2つのエラーメッセージが表示されました。1つはpython dllが見つかりませんでした、もう1つは次のとおりです。 プロシージャエントリポイントRpcImpersonateClientContainerがダイナミックリンクライブラリRPCRT4.dllで見つかりませんでした この2番目のエラーは、非常に重要です。大ざっぱな検索はthisを指していますが、これはWindows 10のみのプロセスであることを示しています。 私は何回かpython 2.7と3.4.3を再インストールしてアンインストールできましたが、python dllエラーはもう表示されませんでした(そのため、現在、マシンにPythonバージョンとして3.4.3しかありません)。 ただし、2番目のエラーが引き続き発生します。私は自分のマシンのすべてのMySQLサービスをアンインストールしようとしましたが、2つを除いて大部分は成功しました。 MySQLコネクタ6.9.5およびMySQL for Excel 1.3.3 どうしてもアンインストールできません。この回答で解決策を試しましたが、次のエラーが発生しました: OpenServiceが1060に失敗しました: 指定されたサービスはインストールされたサービスとして存在しません。 現在、Microsoftインストーラー(拡張子msi)を介してMySQLコミュニティエディション5.6.26.0を再インストールしようとしています。私はそれをクリックして、「関連情報を収集しています...」のようなウィンドウを表示して、それが消えるだけです。 注:Webコミュニティ経由でインストールしようとすると、私はなんとか次の画面を表示し(このプログラムで変更を加えますか?)、その後再び消えます。 どちらもWindowsプロセスでは見つかりません。 ただし、Webコミュニティを数回実行した後、MySQL Installer -Community変更/アンインストールするリストにインストール済みプログラムとして表示されます。変更しようとしても何も起こりませんが、アンインストールしようとすると: プロシージャエントリポイントRpcImpersonateClientContainerがダイナミックリンクライブラリRPCRT4.dllで見つかりませんでした 繰り返しになりますが、2番目のエラー(アンインストールはなんとかできます)。 後で別のグーグル検索、このフランスのスレッドが飛び出した。私のフランス語はせいぜいずさんなものですが、唯一の返答は、破損したDLLとおそらく新規インストールを示唆しているようです。 おそらく関係のないメモについて:私のコンピュータは、起動するたびに更新するように求めてきました。数分後、おなじみのロゴが「シャットダウン」オプションをポップします。アップデートをインストールすることを選択するたびに、どうやらそれはインストールされたようで、起動時にさらにいくつかの設定を行いました。しかし、毎回、それはもう一度起こりました。 さらに徹底的にチェックしたところ、KB3083186が何度もインストールされていたため、.NET 4.6を修復し、自動更新を無効にしたところ、問題がないようです。 私のマシンの関連する詳細は次のとおりです: OS:Windows 7 Home Premium、Service Pack 1。 システム: HP Pavilion dm4ノートブックPC プロセッサー: Intel Core i5-3210 CPU 2.50 …

2
Windows 10上のSQL Server 2000
Windows 10にSQL Server MSDE 2000 SP4をインストールする必要があります。 Windows 7と8.1を実行する他のマシンがあり、SQL Server MSDE 2000は正常に動作します(マージレプリケーションも構成されています)。 現在、Windows 10で同じシナリオをテストしていますが、インストール中にセットアップが予期せず終了します。 このバージョンは非常に古いことを知っていますが、Windows 10にインストールするための回避策はありますか?

1
jsonb列のginインデックスがクエリの速度を低下させるのはなぜですか?
テストデータを初期化します。 CREATE EXTENSION IF NOT EXISTS pgcrypto; CREATE TABLE docs (data JSONB NOT NULL DEFAULT '{}'); -- generate 200k documents, ~half with type: "type1" and another half with type: "type2", unique incremented index and random uuid per each row INSERT INTO docs (data) SELECT json_build_object('id', gen_random_uuid(), 'type', (CASE WHEN random() …

2
SQL Serverフルテキストインデックスを有効にした後、クエリの更新が遅くなる
asp.net Webサイトで、データベースに対して実行される挿入、更新、削除のクエリが多数あります。 数日前に、1つのテーブルの2つの列にフルテキストインデックスを作成します。その後、Webサイトがそのテーブルに対して更新クエリを実行すると、SQL Serverプロセスのメモリとディスクの使用量が急激に増加し、更新が遅くなることがわかりました。クエリは、フルテキストインデックスを作成する前に、パフォーマンスの問題なしに実行されました。 以前は非常に単純だった更新クエリが複雑になっていることにも気づきました。これは、実行プランに全文インデックスの更新などがあるためです。これは、フルテキストを有効にした後に複雑になった新しい実行プランの一部です。 サイトのコンテンツを更新する数時間で、5000の更新クエリを実行しました。フルテキストインデックス処理は、各行で毎回行われると思います。 行の更新の開始時に全文スキャンを無効にしてから、再度有効にする必要がありますか(この関連質問のように)? SQL Serverにフルテキストインデックス作成を5分間停止してから、新しいデータのインデックス作成を開始するように指示できますか? より良い代替手段はありますか?SQL Server 2012を使用しています。

2
タイムスタンプに基づくウィンドウオフセット
ソーシャルフィードの結果をページングするために使用するクエリを書いています。コンセプトは、モバイルアプリがN個のアイテムをリクエストし、@CutoffTime以下で呼び出した開始日時を提供することです。カットオフ時間の目的は、ページングウィンドウをいつ開始するかを確立することです。行オフセットの代わりにタイムスタンプを使用している理由は、新しいソーシャルコンテンツが追加された場合でも、古い投稿を取得するときに、一貫した場所からタイムスタンプを使用できるようにするためです。 ソーシャルフィードアイテムは自分または友達からのものである可能性があるUNIONため、これら2つのグループの結果を組み合わせるためにa を使用しています。もともと私はTheQuery_CTEなしでロジックを試しました、UNIONそしてそれは遅い犬でした。 これは私がやったことです(関連するテーブルスキーマを含む): CREATE TABLE [Content].[Photo] ( [PhotoId] INT NOT NULL PRIMARY KEY IDENTITY (1, 1), [Key] UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(), [FullResolutionUrl] NVARCHAR(255) NOT NULL, [Description] NVARCHAR(255) NULL, [Created] DATETIME2(2) NOT NULL DEFAULT SYSUTCDATETIME(), ); CREATE TABLE [Content].[UserPhotoAssociation] ( [PhotoId] INT NOT NULL, [UserId] INT NOT NULL, [ShowInSocialFeed] …

1
特権はいつ\ lにリストされ、いつリストされませんか?
\ lによってアクセス権限がリストされるのはいつですか、そうでない場合はいつですか?\ lで一覧表示されるアクセス権限は、付与後に変更され、取り消される場合があります。 $ createuser -EP my_readonly $ psql development development=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------------------------+----------+----------+-------------+-------------+----------------------- development | vagrant | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | ... development=# grant usage on schema public to my_readonly; development=# grant connect …

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