データベース管理者

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

1
1秒あたりのトランザクション数が非常に多い
本番サーバーは、1秒あたり平均4,000トランザクションで実行されます。過去数日間で、平均は毎秒175,000トランザクションに急上昇しました。これはタイプミスではなく、1秒あたり175Kです。 トランザクションのDMVを見ると、ユーザーセッションに直接リンクすることはできませんが、次のように表示されます。 SELECT NAME, COUNT(*) FROM sys.dm_tran_active_transactions GROUP BY NAME ORDER BY 2 DESC - +------------------------------+-------+ | Name | Count | +------------------------------+-------+ | WorkFileGroup_fake_worktable | 627 | | LobStorageProviderSession | 217 | | workfile | 171 | +------------------------------+-------+ 誰かがこれらのタイプの取引に光を当てることができますか?または、私はここで幽霊を追いかけていますか?

6
SQL Serverパフォーマンスベースラインモニタリングの作成
概要と比較可能なデータを取得するための私の現在のタスクは、さまざまな生産的なSQL Serverインスタンスに関するいくつかの数値を取得するためのパフォーマンスベースラインを作成することです。 私の考えは: 複数のDMVを使用したい プロファイラートレース(実行計画を含む)を含めたい perfmonデータを含めたい したがって、私が達成しようとしているのは、開始可能および停止可能(スケジュール可能でもあります)の一般的なパフォーマンスモニタリングです。 進行中のパフォーマンス最適化タスクの成功を識別するために必要なすべての情報 長期的な進捗状況を視覚化するのに役立つ、いくつかの集約された単純な図..特に 管理用;-) 個々のキューの変更とインデックス最適化タスクによる改善を比較するためのプロファイラートレース内の再実行可能な実行プラン パフォーマンスベースラインの作成について説明している情報がいくつか見つかりました。それらのほとんどは、非常に複雑であるか、目的のパフォーマンスインジケーターの1つ(主にパフォーマンスデータ)にのみ焦点を当てています。 最も一致するサンプル/説明は次のとおりです。SQLServerのパフォーマンスベースラインの作成 質問は: この種のパフォーマンスモニターをすばやく実行可能な方法で作成した経験がある人はいますか?

2
差分を生成する最も効率的な方法
SQLサーバーに次のようなテーブルがあります。 Id |Version |Name |date |fieldA |fieldB ..|fieldZ 1 |1 |Foo |20120101|23 | ..|25334123 2 |2 |Foo |20120101|23 |NULL ..|NULL 3 |2 |Bar |20120303|24 |123......|NULL 4 |2 |Bee |20120303|34 |-34......|NULL 入力データとバージョン番号を取得するdiffのストアドプロシージャに取り組んでいます。入力データには、名前からfieldZまでの列があります。ほとんどのフィールド列はNULLであることが期待されています。つまり、通常、各行には最初のいくつかのフィールドのデータのみが含まれ、残りはNULLです。名前、日付、およびバージョンは、テーブルに対する一意の制約を形成します。 特定のバージョンについて、このテーブルに関して入力されたデータを比較する必要があります。各行を比較する必要があります。行は名前、日付、バージョンで識別され、フィールドの列の値を変更すると、比較結果に表示されるようになります。 更新:すべてのフィールドが10進数である必要はありません。それらのいくつかはnvarcharである可能性があります。タイプを変換せずにdiffを実行したいのですが、diff出力はすべてをnvarcharに変換できるため、それは表示目的でのみ使用されるためです。 入力が次のようであり、要求されたバージョンが2であるとします。 Name |date |fieldA |fieldB|..|fieldZ Foo |20120101|25 |NULL |.. |NULL Foo |20120102|26 |27 |.. |NULL Bar |20120303|24 …

1
pyMongoで最小値を取得する方法
複数のフィールドを持つコレクションがあり、1つから最小値を取得したいのですが。私は最大値を取得するためのコマンドを知っています: collection.find_one(sort=[("myfield", -1)])["myfield"] しかし、最小を取得するためのものではありません。これを行う方法はありますか?
8 mongodb  python 

1
SQL ServerのSGAM&GAM&IAM&PFSに関するいくつかの質問
SQL Serverの内部構造についていくつか質問があります。 データベースにテーブルがあるとしましょう。 SGAMおよびGAMページは、単一のGAM間隔(〜4GB)内で共有エクステントと均一エクステントを追跡し、ページ/エクステントを割り当てるときに適切なタイプのエクステントを見つけるのに役立ちます(最初の8ページは、混合エクステントとそれらのページの位置から割り当てられます) IAMページへのレコーダー、およびその後のGAMエクステント(均一エクステント)からのこの情報は、次のチェーンIAMページに格納されます)。 たとえば、テーブルのページが割り当てられ、テーブルのサイズが8ページを超えていて、しばらくしてから行が削除され、再利用可能な領域が残ったとします。SQL Serverは、エクステントに空き領域があることをどのように認識しますか? ページには空き領域のサイズに関する情報がありますが、すべてのページをチェックするには時間がかかりすぎます。SGAM&GAMページのビットは、extendが割り当てられているか、いくつかの空きページがあることを除いて何も通知しません(ページ全体が部分的にではなく、空きです)。 ファイルヘッダー、SGAM、GAM、IAMページは、ファイル内の最初のページに含まれます。実際にそれらを指すデータ構造は何ですか?

1
大きなDBのログ配布-ログはどうですか?
現在、大容量のDB(約1.5 TB)のログ配布を設定しており、ログファイルに対して何ができるか疑問に思っています。 現状では、次の手順を実行したいと思います。 DBを完全復旧に変更する プライマリで完全バックアップ(5〜6時間)を取る フルバックアップをセカンダリに復元(NORECOVERYのまま) プライマリでDIFFバックアップを作成 DIFFバックアップをセカンダリに復元(まだNORECOVERYのまま) 「データベースはすでに初期化されています」を使用してログ配布を初期化します 問題は、フルバックアップを実行しているときに、ログファイルがバックアップの完了よりも早くいっぱいになることです。 ログファイルがいっぱいにならないようにするには、どのようなオプションが必要ですか?DIFFリストアはその期間中に行われたトランザクションをすべてカバーするため、フルバックアップ中に通常どおりにログバックアップを実行できますか?これまでにこのサイズのDBでこれを行ったことがありますか?それを簡単にするためのヒント/トリック?

1
これら2つのHADR DMVが異なる状態を報告するのはなぜですか?
SQL Server 2012(11.0.5058.0)Enterprise Edition 2(HA)+1(DR)クラスターに8つの可用性グループがあり、監視DMVが結果を報告して混乱を招いています。6つの可用性グループはHAおよびDR用に構成され、1つはHA専用に構成され、1つはDR専用に構成されます。 6つのHA / DR可用性グループのそれぞれに、プライマリとして「SQLB」、セカンダリ(同期)HAレプリカとして「SQLA」、セカンダリ(非同期)レプリカとして「SQLC」があります。 両方のセカンダリで: SELECT dhags.group_id, dhags.synchronization_health_desc FROM sys.dm_hadr_availability_group_states dhags レポートのすべての可用性グループのレプリケーション同期健康であることNOT_HEALTHYと、 select replica_id,synchronization_health_desc from sys.dm_hadr_availability_replica_states すべてのレプリカの同期状態はであると報告されていますHEALTHY。 プライマリレプリカは、同期状態がのすべての可用性グループとレプリカを報告しますHEALTHY。 1つはレプリカ同期の正常性に関するレポートで、もう1つはAG同期の正常性に関するレポートであることを理解していますが、より詳細な(AG)状態が正常でない場合、より広いコンテキスト(レプリカ)の全体的な正常性に影響することは当然のようです。各レベルでヘルスがどのように決定されるかを説明するMSDNドキュメントが見つかりません。 セカンダリNOT_HEALTHYが可用性グループの同期の正常性を報告するのにHEALTHY、レプリカの同期の正常性を報告するのはなぜですか?なぜこれがプライマリの報告と異なるのですか?

2
SQL開発者にexport.sqlをインポートする方法は?
SQL Developerで、トップメニューから[ツール]> [データのエクスポート]を選択します。データエクスポートウィザードが起動します。 これが輸出です。export.sqlファイルを作成します。今インポートする方法?私はSqlDeveloper 3.20を使用しています。 このチュートリアルに従い、新しい接続を作成しましたが、インポートが見つかりません。ツール->設定->データベース->ユーティリティ->インポート方法と何よりも?スクリプト@C:\ locationOfExportFile \ export.sqlを実行しようとしました そして、私は怒りを感じています SQLエラー:ORA-00942:テーブルまたはビューが存在しません00942. 00000-"テーブルまたはビューが存在しません" *原因: *アクション: ところで、私は何をしているのか分かりません。そのデータベースをローカルホストにしたいだけです。他のコンピューターと私のコンピューターの両方にOracle 11g Expressデータベースがあります。スキーマ名は同じです!

1
MySQLに地理的位置データを格納するための10進数またはポイントデータタイプ
MySQL(Innodb)の「tblAddress」テーブルに各住所の地理的位置を保存したいのですが、2つのオプションがあると思います。 1) 2 columns for Each Address: Latitude DECIMAL(10, 8), Longitude DECIMAL(11, 8) 2) One Column for Each Address: GeoLocation POINT 私のプログラムは、現在の場所(モバイルクライアント)から1キロメートルの半径に該当するすべての住所を検索する必要があります。 また、以下のコマンドは私には機能しません、これのために何が必要かわかりません。 CREATE SPATIAL INDEX GeoLocation ON tblAddress (GeoLocation); したがって、ここで計算と取得を高速化するためにデータを保存するための推奨アプローチは何ですか。お知らせ下さい。


1
2つの可能な所有者/親タイプを持つエンティティのデータベーススキーマ?
私はSequelizeをORMとしてPostgreSQLを使用しています。 1つのタイプがありUserます。2番目のタイプはGroupで、GroupMembershipsテーブルを介して任意の数のユーザーを関連付けることができます。Userは、任意の数のを所有することもできGroupます。 3番目のタイプはPlaylist、UserORまたはaのいずれかに属することができgroupます。このタイプのスキーマを設計して、1つのタイプの所有者またはいずれかのタイプの所有者を持つことができる最善の方法は何ですか? 最初のパスでは両方の関連付けを作成しましたが、一度に1つだけ入力しました。これは機能する可能性がありますが、ハックに見え、クエリを困難にします。 追加情報 コメントを介してMDCCLによって投稿された説明要求に対する私の応答は次のとおりです。 (1)プレイリストが特定のグループによって所有されている場合、このプレイリストは、そのグループのメンバーである限り、1 対多のユーザーに関連していると言えますか? これは技術的には正しいと思いますが、この1対多の関連付けは明示的には存在しません。 (2)では、特定のプレイリストを1 対多のグループが同時に所有することは可能ですか? いいえ、をPlaylist1対多で所有することはできませんGroups。 (3)特定のプレイリストを1 対多のグループ、およびそのようなグループのメンバーではない1 対多のユーザーが所有することは可能ですか? いいえ。(2)のように、1対多のto が存在しPlaylistてGroupはならないためです。さらに、Playlistがによって所有されてGroupいる場合、は所有していませんUser。逆も同様です。一度に1人の所有者のみ。 (4)グループ、ユーザー、プレイリストを一意に識別するために使用されるプロパティは何ですか? それぞれに代理主キー(id)と自然キー(主ではない)があります。これらはslug、GroupおよびPlaylist、およびにusername対応していUserます。 (5)特定のプレイリストで所有者が変更される可能性はありますか? 私はこれが機能であることを計画していませんが(少なくとも最初は)、これは仮説的に発生する可能性があります。 (6)Group.SlugおよびPlaylist.Slug属性の意味は何ですか?それらの値は、主キーとして定義されるのに十分安定していますか、それとも頻繁に変更されますか?これら2つのプロパティの値は、User.Usernameとともに一意である必要がありますか? これらslugのは、固有の小文字のハイフン付きのバージョンであり、それぞれのエンティティのtitleです。たとえばgroup、title「テストグループ」を含むa は「テストグループ」を持ちslugます。重複には増分整数が追加されます。これは彼らのtitle変化がいつでも変わるでしょう。私はそれが彼らが素晴らしい主キーを作成しないことを意味すると思いますか?はい、slugsそしてusernames、それぞれのテーブルにユニークです。

1
データベースを切り替えずにユーザー/ログインを別のデータベースのロールに追加したい
私は「新しい」、データベース内の役割/ログイン持ってmynewdb役割を持つが"emailsender"。私はのプロファイルをスクリプト化しましたsp_send_dbmailが、ログインをDatabaseMailUserRoleinに追加するスクリプトを作成しようとしていますが、msdb円を描いて回っているようです。重要なのは、更新スクリプトをで実行したいことですmynewdb。私SSMSはこれを行うために使用できることを知っています。質問は: に切り替えずにT-SQL、mynewdbデータベースからのロールにユーザーを追加するスクリプトを作成するにはどうすればよいmsdbですか?

2
テキストと画像からvarchar(max)とvarbinary(max)への移行
いくつかのimageおよびtext列を含むSQL Serverデータベースがあり、それらを非推奨でない対応するvarbinary(max)とに移行することから発生する可能性のある潜在的な問題を調査していますvarchar(max)。 アプリケーションコードの変更は別として、私の主な関心事は、これに関連する潜在的な「問題」です。たとえば、古いデータ型ではサポートされているが、新しいデータ型ではサポートされていない機能はありますか? 新しい型は少なくとも古い型と同じくらい大きいので、切り捨てによるデータの損失は少なくとも問題にはならないようです。

2
MySQL SELECTステートメントのTIMESTAMPフィールドのWHERE条件の最適化
使用時間を追跡する分析システムのスキーマに取り組んでいます。特定の日付範囲の合計使用時間を確認する必要があります。 簡単な例を挙げると、このタイプのクエリは頻繁に実行されます。 select sum(diff_ms) from writetest_table where time_on > ("2015-07-13 15:11:56"); 通常、このクエリは、データが密集しているテーブルで約7秒かかります。約3,500万行、Amazon RDS(db.m3.xlarge)で実行されているMySQLのMyISAMがあります。 WHERE句を削除すると、クエリの所要時間がわずか4秒になり、2番目の句(time_off> XXX)を追加すると、さらに1.5秒追加され、クエリ時間が8.5秒になります。 私はこれらのタイプのクエリが一般的に行われることを知っているので、それらをより速く、理想的には5秒未満に最適化したいと思います。 私はtime_onにインデックスを追加することから始めましたが、WHERE "="クエリは大幅に高速化しましたが、 ">"クエリには影響がありませんでした。WHERE ">"または "<"クエリを高速化するインデックスを作成する方法はありますか? または、このタイプのクエリのパフォーマンスについて他に提案がある場合は、お知らせください。 注:「diff_ms」フィールドを非正規化ステップとして使用しています(time_off-time_onと同じです)。これにより、集約のパフォーマンスが約30%から40%向上します。 私はこのコマンドでインデックスを作成しています: ALTER TABLE writetest_table ADD INDEX time_on (time_on) USING BTREE; (「time_on>」を使用して)元のクエリで「explain」を実行すると、time_onは「possible_key」であり、select_typeは「SIMPLE」です。「追加」の列は「使用場所」を示し、「タイプ」は「すべて」です。インデックスが追加された後、テーブルは「time_on」が「MUL」キータイプであることを示しています。これは、同じ時間が2回存在する可能性があるため、正しいように見えます。 これがテーブルスキーマです: CREATE TABLE `writetest_table` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `sessionID` int(11) DEFAULT NULL, `time_on` …

2
列数の多い単一のテーブルと列数の少ない複数のテーブル
ソーシャルネットワークのウェブサイトに適したデータベース設計は何でしょうか?列が多く行が少ない単一のテーブル、または列は少ないが行が多い複数のテーブル? 例:ユーザーは自分の壁またはグループに更新を投稿できます。 私が考えることができる2つのデータベース設計は次のとおりです。 デザイン1 UserPosts id ユーザーID 役職 日付時刻 UserGroupPost: id groupId ユーザーID 役職 日付時刻 潜在的な問題:結合が必要になる可能性があり、(将来的には)クエリが遅くなる可能性があります。 デザイン2 投稿: id ユーザーID groupId 役職 datetime(ユーザーが壁に投稿した場合、groupidはnullになります) 潜在的な問題:大きなデータセットをループすると、(長い)時間がかかる場合があります。 データが増加した場合、どのようにしてパフォーマンスを向上させることができますか?他に(より良い)方法はありますか?

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