データベース管理者

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

2
SQL Serverの複数のワーカーのFIFOキューテーブル
次のstackoverflowの質問に答えようとしました: 複数のサーバーアプリケーションインスタンスで個々のテーブル行を処理するには、どのSQL Server 2005/2008ロックアプローチを使用する必要がありますか? やや素朴な答えを投稿した後、私は自分の口がどこにあるかを考え、実際に私が提案しているシナリオをテストしました。まあ、それは思ったよりもはるかに難しいことが判明しました(誰にも驚きはありません、確かです)。 ここで私が試し、考えたことがあります: まず、派生テーブル内でORDER BYを使用して、TOP 1 UPDATEを試しましたROWLOCK, READPAST。これによりデッドロックが発生し、アイテムの順序が狂って処理されました。同じ行を複数回処理しようとすることを必要とするエラーを除いて、可能な限りFIFOに近い必要があります。 私は、その後の様々な組み合わせを使用して、変数に所望の次のキューIDを選択しようとしたREADPAST、UPDLOCK、HOLDLOCK、及びROWLOCK排他的にそのセッションによって更新するための行を保存します。私が試したすべてのバリエーションは、以前と同じ問題に悩まされていましたREADPAST。 READ COMMITTEDまたはREPEATABLE READ分離レベルでのみREADPASTロックを指定できます。 READ COMMITTED であったため、これは混乱を招きました。以前にこれに遭遇したことがあり、イライラします。 この質問を書き始めてから、Remus Rusaniが質問に対する新しい回答を投稿しました。私は彼のリンクされた記事を読んで、彼が破壊的な読み取りを使用していることを確認しました。彼は答えで、「Webコールの間、ロックを保持することは現実的に不可能です」と述べた。更新または削除を行うためにロックが必要なホットスポットとページに関する彼の記事の内容を読んだ後、探していることを行うために正しいロックを実行できたとしても、それはスケーラブルではなく、大規模な並行性を処理しません。 今、どこに行けばいいのかわかりません。行の処理中にロックを維持することはできません(高tpsまたは大規模な同時実行性をサポートしていなくても)。私は何が欠けていますか? 私より賢い人と私より経験のある人が助けてくれることを期待して、私が使用していたテストスクリプトを以下に示します。TOP 1 UPDATEメソッドに切り替えられますが、他のメソッドを残し、コメントアウトしてありますので、あなたもそれを調べたいと思います。 これらをそれぞれ別のセッションに貼り付け、セッション1を実行してから、他のすべてをすばやく実行します。約50秒でテストは終了します。各セッションからのメッセージを見て、どのような作業を行ったか(またはどのように失敗したか)を確認してください。最初のセッションでは、存在するロックと処理中のキューアイテムの詳細を2回目に撮影したスナップショットを含む行セットが表示されます。それは時々機能し、他の時間はまったく機能しません。 セッション1 /* Session 1: Setup and control - Run this session first, then immediately run all other sessions */ IF Object_ID('dbo.Queue', 'U') IS NULL CREATE …


3
このテクノロジーを使用したことがない人のための標準的なNoSQLリソースは何ですか?
私はNoSQLテクノロジーにますます興味を持ち始めており、SEのしくみと利用可能なさまざまな製品に関するSEに関するいくつかの投稿を読むことができます。 しかし、たとえば、研究論文に掲載でき、以下の概要を把握するために読むことができる標準的な参考文献、書籍、記事があるのではないかと思います。 メリット/デメリットは何ですか? 使い方?
15 nosql 


4
空白、セミコロン、およびスラッシュを含むSQLPlusでスクリプトを実行します
ときどき、SQL DeveloperまたはToadで正常に実行されるスクリプトを入手しますが、SQL * Plusから正常に実行するには変更が必要です。それぞれが空白行、セミコロン、およびスラッシュを含む複数のステートメントを含む最悪の例です: INSERT INTO t1 VALUES ('a ; / '); INSERT INTO t1 VALUES ('b ; / '); DELETE FROM t1 WHERE c1 = 'c ; / '; さまざまな理由により、これらのステートメントはSQL * Plusから実行する必要があります。空白行は簡単に解決できます... set sqlblanklines on をsqlterminator変更および/またはオフにすることができますが、どちらもコードの変更が必要であり、前者は問題を解決せずに移動し、埋め込みスラッシュの問題は解決しません。 最善の答えは、何らかの方法で環境を変更することにより(sqlblanklinesが行うように)これらのステートメントを変更せずに実行できるようにする方法です。それが不可能な場合は、おそらくスクリプトをプログラムで変更する方法があります。手動での変更を避けようとしています。

2
dboスキーマの下にテーブルが作成されない
SSMSでテーブルを作成するとき、次のステートメントを実行すると気付きました。 CREATE TABLE [tableName]; テーブルは独自のスキーマの下に作成されます(dboではありません)。したがって、dboスキーマの下で作成するには、次のように明示的に宣言する必要があります。 CREATE TABLE [dbo].[tableName]; テーブルを作成するときに[dbo]部分を指定する必要がないように、誰かが方法(サーバー全体の設定など)を知っていますか?

4
概念スキーマが公開されているセキュリティリスクはどれくらいですか?
私は研究のために政府機関の情報システムに概念スキーマを要求していました。セキュリティリスクであるという理由で、私の要求は拒否されました。 私は実際に広範なデータベースの経験がないので、その主張を確認することはできません。スキーマを公開することは、本当に大きなセキュリティリスクですか?つまり、これらはかなり抽象的であり、ハードウェアおよびソフトウェアの実装とは離婚しています。攻撃者が概念スキーマをどのように悪用できるかについての説明をいただければ幸いです。ありがとう。

4
大きなインデックスのINCLUDEフィールドはシステムパフォーマンスにどのように影響しますか?
この質問は、とSQL Serverのインデックスのパフォーマンスについてですvarchar(2000)としてINCLUDEの被覆指数インチ 低速で不安定なデータベースアプリケーションのパフォーマンスを改善しようとしています。いくつかのケースでは、データのようなmultple文字列操作を含むクエリで、大VARCHAR列を介してアクセスされるSUBSTRING()、SPACE()とDATALENGTH()。アクセスの簡単な例を次に示します。 update fattable set col3 = SUBSTRING(col3,1,10) + '*' + SUBSTRING(col3,12,DATALENGTH(col3)-12) from fattable where substring(col3,10,1) = 'A' and col2 = 2 スキーマは次のようになります。 CREATE TABLE [dbo].[FatTable]( [id] [bigint] IDENTITY(1,1) NOT NULL, [col1] [nchar](12) NOT NULL, [col2] [int] NOT NULL, [col3] [varchar](2000) NOT NULL, ... 次のインデックスが定義されており、大きなテキスト列にカバーフィールドがあります。 CREATE NONCLUSTERED INDEX [IndexCol2Col3] …

2
SQLクエリ(またはビュー定義)で「投影」という用語は何を指しますか
Oracleのドキュメントではザ・クエリオプティマイザ、下のビューのマージ、私は次のような情報を見つけました ビューのマージの最適化は、選択、投影、および結合のみを含むビューに適用されます。つまり、マージ可能なビューには、集合演算子、集計関数、DISTINCT、GROUP BY、CONNECT BYなどが含まれていません。 (エンファシス鉱山) しかし、私はそのような投影が実際に何を指しているのか推測することしかできません。
15 oracle  select 

2
法医学的にデータを削除/更新する
オラクルからデータをフォレンジックで削除する必要があります。削除しただけの場合、そのスペースが再利用されるまで、データは実際にデータファイルに残っていると理解しています。REDO /アーカイブ/ UNDOスペースについては心配していません。それらはすぐに適切に期限切れになります。 データが実際にデータファイルから削除されるようにする方法はありますか?
15 oracle  security 

2
アンケートデータベースの設計-どちらの方法が良いですか?
長いhtmlページが1つあり、いくつかの質問セットが小さなセクション(1ページに約15のサブセクション)に分かれています。質問の合計は約100の質問です。入力、複数選択、チェックボックス、ラジオボタン、テキストエリア、およびファイルのアップロード。1つの質問には、チェックボックスのグループ、選択リストのグループ、複数選択のグループ、またはそれらすべてを1つの回答にまとめたもののいずれかから取得した多くの回答を含めることができます。私はこのデータベース設計を以下で使用するつもりだったが、結局のところそれは良いアプローチではないことがわかった。 1人の顧客は、1組の質問(100の質問につき1人の顧客)しか持てません。 古いアプローチでは、データベースに疑問を抱かず、代わりにPHPコーディングで定数として割り当てます。問題は、PHPの質問をデータベースの回答と同期させるために比較する必要があることです。1つの質問がPHPから変更/削除/移動された場合、質問データベースの回答と一致させるために間違いなく迷子になります。より良い解決策? フォームの複数の要素から取得した複数の回答を1つの回答として1つのフィールドに保持できますか?このフィールドを取得して、フォームで顧客が表示するために再度表示するにはどうすればよいですか? 下のどのオプションに行くべきですか? オプション1:古いアプローチ(1テーブル) 表:アンケート ID(PK) 顧客ID 状態 A1 A2 A3 。 。 。 A100 オプション2:新しいアプローチ(2つのテーブル) 表:質問 QID(PK) 質問(varchar) 表:回答 援助(PK) 顧客ID QID(int) 回答(varchar) またはオプション3?

3
PostgreSQLとMySQL:空間的特徴の比較
現在、空間データコンポーネントを持つWebアプリケーションを構築しています。空間データの比較では、最初に特定のポイントを取得し、一致する重複した空間ポリゴンを返します。 そうは言っても、私たちのデータベースには、一般的なリレーショナルデータベースで見られるすべての典型的なものを含む他の多くのコンポーネントがあります。 私たちはプロジェクトで、使用するデータベースソリューションを選択する必要があります。 すべてのプロジェクトメンバーは、MySQLの実装と管理に精通していますが、すべての研究では、特にpostGISを使用した空間データに関して、PostgreSQLがより優れたソリューションであることが示唆されています。 私たちのアプリケーションが多くの同時ユーザーで多くのアクションを体験することを期待しています。 空間データコンポーネントを使用してRDBMSとしてMySQLを使用した経験がある人には、長期的なアドバイスや経験がありますか? PostGISを使用することの不便さはありますか?

2
スキーマレス/フレキシブル+ ACIDデータベース?
私は、小規模企業の顧客向けのWebベースのClojureアプリケーションとして、VBベースのオンプレミス(ローカルにインストールされた)アプリケーション(請求書+在庫)を書き換えることを検討しています。これは、同様の取引の顧客向けのSaaSアプリケーションとして提供される予定です。 私はデータベースオプションを見ていました:私の選択はRDBMS:Postgresql / MySQLでした。最初の1年間で最大400人のユーザーにスケールする可能性があります。通常、ユーザーあたり1日あたり20〜40ページビューです。ほとんどの場合、静的ビューではないトランザクションに使用します。各ビューには、データの取得とデータの更新が含まれます。ACIDコンプライアンスが必要です(またはそう思う)。そのため、トランザクション量は膨大ではありません。 私の好みに基づいてこれらのいずれかを選択するのは簡単でしたが、この1つの要件のために、SaaSアプリの典型であると信じています:スキーマは、顧客/ユーザーを追加し、各顧客のビジネス要件の変更(最初に限って柔軟性を制限します)。私はDBの専門家ではないので、私が考えることができ、読んだことに基づいて、多くの方法でそれを処理できます。 複数のテナントをホストする単一のDBを使用して、MySQl / Postgresqlで従来のRDBMSスキーマを設計します。さらに、顧客を追加したり、既存の顧客に変更を加えたりするときに、将来の変更に対応できるように、各テーブルに十分な「浮動」列を追加します。これには、スキーマに小さな変更が加えられるたびにDBに変更が伝播されるという欠点があります。Postgresqlのスキーマ更新では、ロックなしでリアルタイムに更新できることを読んだことを覚えています。しかし、このユースケースでどれだけ苦痛であるか、どれほど実用的かはわかりません。また、スキーマの変更により、新しい/小さなSQL変更も導入される可能性があるためです。 RDBMSを使用しますが、データベーススキーマを柔軟な方法で設計します。エンティティ属性値に近い値を使用するか、単にキー値ストアとして使用します。(就業日、たとえばFriendFeed) オブジェクト全体をメモリ内にオブジェクトとして保持し、定期的にログファイルに保存します(edval、lmaxなど)。 MongoDBやRedisなどのNoSQL DBを探してください。しかし、私が収集できるものに基づいて、これらはこのユースケースに適さず、ACIDに完全に準拠していません。 SQLおよびACID準拠の動作を保持し、「新世代」のRDBMSであるVoltDbやJustoneDb(クラウドベース)などのNewSQL Dbsを探します。 neo4j(graphdb)を見ましたが、それがこのユースケースに適合するかどうかはわかりません スケーラビリティや分散コンピューティング以上のユースケースでは、「スキーマ+ ACIDの柔軟性+合理的なパフォーマンス」を実現するためのより良い方法を探しています。ネット上のほとんどの記事では、ACID / Transactions側を除外しつつ、パフォーマンス(NoSQL DBの場合)とスケーラビリティにつながる原因としてのスキーマの柔軟性について述べています。 これは、「スキーマの柔軟性とACID」トランザクションの「どちらか」のケースですか、それともより良い方法がありますか?

5
PostgreSQL:データベースクラスターの初期化に失敗しました
両方C:\PostgreSQLと完全なアクセス権と管理者権限をC:\PostgreSQL\data持つpostgresユーザーがいます。 postgresユーザーからpostgresql-9.1.2-1-windows.exeをadminとして実行しました。目標C:\PostgreSQL 試行するたびに、「データベースクラスターの初期化に失敗しました」というメッセージが表示されます。 ご質問 Windowsサービスでなくてもすべて実行できますか? Windowsサービスとしてインストールする回避策はありますか? GeoDjangoで動作するようにPostGISをセットアップしようとしています。 PostGISを手動でインストールできました。PostgreSQLの初心者であり、私はこれらすべてに自信の危機に直面しています。MySQLからPostgreSQLに初めて来ました。 C:\ Users \ Larry \ AppData \ Local \ Temp \ install-postgresql.logからの関連するログ出力: WScript.Network initialized... Called IsVistaOrNewer()... 'winmgmts' object initialized... Version:6.1 MajorVersion:6 Ensuring we can read the path C: (using icacls) to Larry: Executing batch file 'radA3CF7.bat'... Output file does not exists... Called …

2
SQL Server Frozen Ghost Cleanupの回避策が必要です
行数が5Mから1.5Gのテーブルがいくつかあります 各テーブルにはBLOBフィールドがあり、そのサイズは100バイトから30 Mバイトまで変化し、「行外の大きな値タイプ」= ONとして保存されます。 テーブルは異なるファイルグループに格納され、3〜4個のファイルがそれぞれ異なるディスク@異なるLUN @非常に高速なSAN これらのテーブルは毎日、サイズが5〜100 Gbで、60万〜150万行に拡大します。 2週間から6か月まで変化する一定の時間が経過すると、行の一部が削除されるかアーカイブDBに移動されるため、6か月以上前の作業テーブルには行がありません。 サーバーの現在の構成: SQLサーバーエンジンは2008 R2 SP1 Enterprise @ 24コア、@ 64Gb RAM SQL Serverは、追加の起動フラグを使用して実行されます。 -T 3640; (ストアドプロシージャのステートメントごとにクライアントにDONE_IN_PROCメッセージを送信する必要がありません。これは、SET NOCOUNT ONのセッション設定に似ていますが、トレースフラグとして設定されると、すべてのクライアントセッションがこのように処理されます) -T 1118;(tempDBの割り当てを一度に1pg(最初の8ページ)から1エクステントに切り替えます。) -T 2301;(意思決定支援クエリに固有の高度な最適化を有効にします。このオプションは、大規模なデータセットの意思決定支援処理に適用されます) -T 1117;(すべてのデータファイルを一度に成長させます。それ以外の場合は順番に進みます。) -E; (ファイルグループ内の各ファイルに割り当てられるエクステントの数を増やします。このオプションは、インデックスまたはデータスキャンを実行するユーザーの数が限られているデータウェアハウスアプリケーションに役立ちます) -T 834; (SQL Serverはバッファプール用に割り当てられたメモリのためのWindowsの大きなページの割り当てを使用するようにします http://msdn2.microsoft.com/en-us/library/aa366720.aspx、 http://support.microsoft。 com / kb / 920093) SQL Serverはラージページ拡張機能を使用します SQL Serverは高速ファイル初期化オプションを利用します AUTOSHRINKはすべてのデータベースでオフです 問題がある …

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