データベース管理者

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

1
Postgresqlを変更する文字のサイズ制限
postgresqlのさまざまなデータタイプのサイズ制限は何ですか?私はどこかで、1から10485760の間character varying(n)でvarchar(n) nなければならないことを見ました。それは本当ですか? 何のために有効なサイズですcharacter(n)、char(n)とtext?

4
mongoシェルだけをインストールすることは可能ですか?
Dockerをインストールして実行しています MongoDBし、Macでローカル開発用コンテナーをしています。問題は、CLIから上記のDBに簡単に接続できないことです。私が持っているロボ3Tがインストールされていますが、私が使用することを好むCLIの代わりにクライアントを。 JUSTをインストールする既知の方法はありますか mongo shellmongoOS Xに完全なDBディストリビューションではなく(コマンド)だけますか?
20 mongodb  mac-os-x 

2
SQL INDEX-仕組み
データベースとSQLに関する私の知識は、ほとんど大学のクラスに基づいています。とにかく、私はデータベースで作業していた会社で数ヶ月(ほぼ1年)過ごしました。 私は数冊の本を読んでいると私は、次のようなデータベースに関するいくつかの研修に参加したMySQL、PostgreSQL、SQLite、OracleともいくつかnonSQL dbのように、私たちMongoDB、Redis、ElasticSearchなど 私が言ったように、私は初心者であり、多くの知識が不足していますが、今日、誰かが私の初心者の知識に完全に反することを話しました。 説明させてください。SQLデータベースを使用Personして、内部にレコードがほとんどない単純なテーブルを作成しましょう。 id | name | age ----------------- 1 | Alex | 24 2 | Brad | 34 3 | Chris | 29 4 | David | 28 5 | Eric | 18 6 | Fred | 42 7 | Greg | 65 8 | Hubert | …
19 index 

1
単純なループの結果、ASYNC_NETWORK_IOが待機するのはなぜですか?
次のT-SQLは、SSMS v17.9を搭載したマシンで約25秒かかります。 DECLARE @outer_loop INT = 0, @big_string_for_u VARCHAR(8000); SET NOCOUNT ON; WHILE @outer_loop < 50000000 BEGIN SET @big_string_for_u = 'ZZZZZZZZZZ'; SET @outer_loop = @outer_loop + 1; END; とのASYNC_NETWORK_IO両方に応じて、532ミリ秒の待機を蓄積sys.dm_exec_session_wait_statsしsys.dm_os_wait_statsます。ループの反復回数が増えると、合計待機時間が長くなります。wait_completed拡張イベントを使用すると、いくつかの例外を除いて、約43ミリ秒ごとに待機が発生することがわかります。 さらに、ASYNC_NETWORK_IO待機の直前に発生する呼び出しスタックを取得できます。 sqldk.dll!SOS_DispatcherBase::GetTrack+0x7f6c sqldk.dll!SOS_Scheduler::PromotePendingTask+0x204 sqldk.dll!SOS_Task::PostWait+0x5f sqldk.dll!SOS_Scheduler::Suspend+0xb15 sqllang.dll!CSECCNGProvider::GetBCryptHandleFromAlgID+0xf6af sqllang.dll!CSECCNGProvider::GetBCryptHandleFromAlgID+0xf44c sqllang.dll!SNIPacketRelease+0xd63 sqllang.dll!SNIPacketRelease+0x2097 sqllang.dll!SNIPacketRelease+0x1f99 sqllang.dll!SNIPacketRelease+0x18fe sqllang.dll!CAutoExecuteAsContext::Restore+0x52d sqllang.dll!CSQLSource::Execute+0x151b sqllang.dll!CSQLSource::Execute+0xe13 sqllang.dll!CSQLSource::Execute+0x474 sqllang.dll!SNIPacketRelease+0x165d sqllang.dll!CValOdsRow::CValOdsRow+0xa92 sqllang.dll!CValOdsRow::CValOdsRow+0x883 sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x15d sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x638 sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x2ad …
19 sql-server  ssms 

3
文字列の先頭ではなく中央を検索するとき、それは何と呼ばれますか?
仲間の開発者とのコミュニケーションを改善するために、語彙を磨き上げようとしています。'running%'文字列内のどこからでも最初から文字列を検索する必要があるかどうかを議論しているサイトには、いくつかの場所があります'%running%。 ファジーとは「run」、「runing」[sic]、「runed」[sic]という単語の形式を変更することを意味するため、中間検索を「ファジー」と呼んでいます。 文字列の先頭を検索し、文字列の中央を検索するための正しい用語は何ですか?

2
Windows OS QuantumとSQL OS Quantum
簡単な質問 SQL Server Quantum(4 ms)とServer OS Quantum(通常:187.5 ms)はどのように同期しますか? 簡単な質問の説明 184ミリ秒のOSクォンタム(46の完全なSQLクォンタムに対応)が使用された後、OSクォンタムには3.5ミリ秒の時間が経過してから、スケジュールを別のプロセスに引き渡す必要があります。SQL OSはクォンタム(4ミリ秒)を開始し、3.5ミリ秒後、OSクォンタムは、スケジュールを生成する前に0.5ミリ秒残っている現在のSQL OSスレッドを停止することを決定しました。今、何が起きた? OS Quantumの詳細 次のいくつかのセクションでは、OSクォンタムに関してこれまでに発見したことと、クォンタムの継続時間を計算する方法について説明します。OSの「クォンタム」の持続時間は「ティック」に基づいており、「ティック」自体の持続時間は「クロック間隔」に基づいており、通常は15.625000ミリ秒です。しかし、少し詳しく説明させてください... ダニ ブログの記事Know Know Thy Tickで、著者Jimはクロック間隔(別名「ティック」)の基本とその目的について説明しています。 「ほとんどのx86マルチプロセッサのクロックインターバルは約15ミリ秒です」などと読んだとき、クロックの値、つまり「ティック」のインターバルを決定せざるを得ません。幸いなことに、この引用を読んだ本であるWindows Internals Fourth Editionは、私の悩みを解決するための参考資料となります。...前述の本の著者であるMark Russinovichは、彼のWebサイトでユーティリティClockResを利用できるようにしてくれました。このユーティリティを実行すると、x86マルチプロセッサPCのクロック間隔が15.625000ミリ秒であることがわかりました。興味深いが、私の好奇心はもっと知りたい。 量子 記事の著者は、2番目の記事で説明を続けています。 それ... もちろん、ティック間隔が重要である本当の理由は、それがスレッドのスケジューリングに影響することです。Windowsスケジューラーは、各スレッドに実行する「量子」時間を与えてから、同じ優先度レベルの別のタスクの実行を許可します。スケジューラーがスレッドに割り当てるクォンタムは、ティック間隔の倍数です。特定のスレッドに選択された特定のクォンタム値は、この記事で説明したいところを少し超えています。 OK とりあえず、XPeのフォアグラウンドスレッドのデフォルトのクォンタム値を調べてみましょう。この場合、Windowsスケジューラは18または6ティック間隔のクォンタムを割り当てます。(はい、クォンタムをティック間隔に変換するには、3で除算する必要があります。ただし、複数の理由は、スケジューラーがスレッドを一時停止させる操作を行うためにスレッドを「チャージ」できるようにするためです。) クロック間隔(ティック)は約15.625000ミリ秒であり、デフォルトのクォンタムが18であるWindowsデスクトップOSでは6ティックまたは93.750000ミリ秒(18/3 * 15.625000ミリ秒)になることがわかっています。 Windows Server OSでは、デフォルトのクォンタムは異なります。「プロセッサのスケジューリング」設定が「バックグラウンドサービス」に設定されている この設定は、「システム設定|詳細(タブ)|パフォーマンス(セクション)|設定...」で確認できます。「パフォーマンスオプション|詳細(タブ)|プロセッサスケジューリング」が開きます。 デフォルトのクォンタム設定は、36(バックグラウンド)から36(フォアグラウンド)です。量子はより大きく、したがってより長くなります。これは、WindowsデスクトップOSの18(6ティック)クォンタムフォアグラウンド設定の93.750000ミリ秒の2倍の量であり、バックグラウンドサービス用に設定されたサーバーOSでは約187.500000ミリ秒です。 観察/説明 サーバーまたはデスクトップで「バックグラウンドサービス」から「アプリケーション」に設定を変更すると、レジストリのHKLM \ SYSTEM \ CurrentControlSet \ Control \ PriorityControl \ …
19 sql-server 

1
INSERTのOUTPUT句の順序に依存しても安全ですか?
この表が与えられた場合: CREATE TABLE dbo.Target ( TargetId int identity(1, 1) NOT NULL, Color varchar(20) NOT NULL, Action varchar(10) NOT NULL, -- of course this should be normalized Code int NOT NULL, CONSTRAINT PK_Target PRIMARY KEY CLUSTERED (TargetId) ); わずかに異なる2つのシナリオで、行を挿入し、ID列から値を返します。 シナリオ1 INSERT dbo.Target (Color, Action, Code) OUTPUT inserted.TargetId SELECT t.Color, t.Action, t.Code …

1
INSERTのみを受け取るテーブルでVACUUMを実行する価値はありますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 3年前に移行され ました。 2015年のre:Inventのトークで、AWSは更新または削除の後だけでなく、挿入後にもバキュームを実行する必要があると述べました。講演の関連部分は次のとおりです。 http://www.youtube.com/watch?v=tZXp19q8RFo&t=16m2s ブロックが挿入のみを受信した場合でも、ブロックに対して実行する必要があるクリーンアップがあり、このクリーンアップは、ブロックが最初に選択されたとき(読み取りを遅くする)またはバキューム中に実行できます。これは本当ですか?もしそうなら、正確にどのようなクリーンアップを行う必要がありますか?

4
テーブルに存在しないリストからIDを見つける
次のスキーマとデータがあるとします。 create table images( id int not null ); insert into images values(1), (2), (3), (4), (6), (8); 次のようなクエリを実行します。 select id from images where id not exists in(4, 5, 6); しかし、これは機能しません。上記のケース5は、テーブルレコードに存在しないため、返されるはずです。

4
SQL再帰は実際にどのように機能しますか?
他のプログラミング言語からSQLに移行すると、再帰クエリの構造はかなり奇妙に見えます。一歩ずつ歩いていくと、バラバラになっているようです。 次の簡単な例を考えてみましょう。 CREATE TABLE #NUMS (N BIGINT); INSERT INTO #NUMS VALUES (3), (5), (7); WITH R AS ( SELECT N FROM #NUMS UNION ALL SELECT N*N AS N FROM R WHERE N*N < 10000000 ) SELECT N FROM R ORDER BY N; それを見てみましょう。 最初に、アンカーメンバーが実行され、結果セットがRに格納されます。したがって、Rは{3、5、7}に初期化されます。 次に、実行はUNION ALLを下回り、再帰メンバーが初めて実行されます。Rで実行されます(つまり、現在手元にあるRで実行されます:{3、5、7})。この結果は{9、25、49}になります。 この新しい結果はどうなりますか?既存の{3、5、7}に{9、25、49}を追加し、結果のユニオンRにラベルを付け、そこから再帰を続行しますか?または、Rをこの新しい結果{9、25、49}のみに再定義し、後ですべての結合を行いますか? どちらの選択も意味がありません。 Rが{3、5、7、9、25、49}であり、再帰の次の反復を実行すると、{9、25、49、81、625、2401}になり、 {3、5、7}を失った。 …

3
明確なフローの強制
このようなテーブルがあります: CREATE TABLE Updates ( UpdateId INT NOT NULL IDENTITY(1,1) PRIMARY KEY, ObjectId INT NOT NULL ) 基本的に、IDが増加するオブジェクトの更新を追跡します。 このテーブルのコンシューマーはUpdateId、特定のから順に特定の100個のオブジェクトIDのチャンクを選択しますUpdateId。基本的に、中断した場所を追跡し、更新をクエリします。 私はクエリのみ書き込むことによって最大限に最適なクエリプランを生成することができましたので、これは興味深い最適化問題であることがわかってきましたが起こる私はインデックスのためにやりたいが、ないが保証する私が欲しいもの: SELECT DISTINCT TOP 100 ObjectId FROM Updates WHERE UpdateId > @fromUpdateId @fromUpdateIdストアドプロシージャのパラメーターはどこにありますか。 次の計画: SELECT <- TOP <- Hash match (flow distinct, 100 rows touched) <- Index seek UpdateId使用されているインデックスのシークにより、結果は既に素晴らしく、必要な更新IDの最低から最高まで並べられています。そして、これはフロー別の計画を生成します。それは私が望むものです。しかし、順序は明らかに動作を保証するものではないため、使用したくありません。 このトリックにより、同じクエリプランが得られます(ただし、冗長なTOPがあります)。 WITH …

2
TVPを読み取り専用にする必要がある理由、および他のタイプのパラメーターを読み取り専用にできない理由
このブログによると、関数またはストアドプロシージャのOUTPUTパラメーターは、パラメーターでない場合は本質的に値渡しであり、パラメーターである場合は本質的に参照渡しの安全なバージョンとして扱われOUTPUTます。 最初は、TVPの宣言を強制する目標は、TVPをパラメーターREADONLYとして使用できないことを開発者に明確に知らせることであると考えましたが、OUTPUT非TVPをとして宣言できないため、さらに処理が必要READONLYです。たとえば、次は失敗します。 create procedure [dbo].[test] @a int readonly as select @a メッセージ346、レベル15、状態1、プロシージャテスト パラメーター "@a"はテーブル値パラメーターではないため、READONLYとして宣言できません。 以来統計が保存されていない TVPにDML操作を防止することの理論的根拠は何ですか? OUTPUT何らかの理由でTVPをパラメーターにしたくないことに関連していますか?

3
負荷の下での挿入パフォーマンスの向上:なぜですか?
非常に非正規化されたテーブルへの挿入を実行するコードがあります。テーブルには、〜100〜300 +の範囲の列数があります。これは、Windows Server 2008上で実行されるSQL Server 2008 R2です。 各挿入は、同じトランザクションの下のいくつかのテーブルへの挿入で構成されます。一部の挿入はNHibernateによってバッチ処理されますが、一部は挿入できませんが、それらはすべて同じトランザクションの下にあります。 挿入を実行するコードを繰り返し呼び出して、たとえば500回挿入を実行すると、平均で約360ミリ秒になります。 奇妙なことに、4つのプロセス(Windows Server 2008の4つの異なるコマンドプロンプトから同じexeを実行)を使用してテストコードを同時に実行すると、呼び出しごとの挿入パフォーマンスが大幅に向上します。バーストは90ミリ秒(ほぼX4の高速)になります。コードから挿入時間を測定しています。 4つのプロセスは互いに何も知らないので、これはSQL Serverと関係があると考えていますが、その理由はまったくわかりません。なぜこれが起こっているのか、挿入がそれほど頻繁ではないときに同じパフォーマンスを得ることができる構成があるかどうかを知りたいです。 dbレベルで何が起こっているかを理解するためのSQL Server監視方法に関する提案も同様に歓迎します。


2
インタビューSQL質問
表「従業員」を考える employee_id | salary | department_id -------------+--------+--------------- SQLを使用した場合のみ、ある部門から別の部門への従業員の異動すべてが検出されるため、「出発」部門と「到着」部門の両方の平均給与が増加しました。 PS私はインタビューで質問を受けましたが、決して答えることはありませんでしたが、Googleはほとんど役に立ちません。

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