データベース管理者

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

3
MongoDB MMAPv1 vs WiredTigerストレージエンジン
:mongoDB3で新しいストレージエンジン登場WiredTigerを。それでも、MMAPv1は依然としてMongoのデフォルトの選択肢です。 一方が他方よりも優れているとは限りません。多くの場合、ユースケースとジョブに適したツールの選択の問題です。しかし、どのエンジンがどの仕事に適していますか? 実際、MMAPv1はデフォルトのエンジンですが、WiredTigerはほとんどすべての分野で優れているようです。MMAPv1と同じ機能に加えて: 書き込みパフォーマンスの向上、 ドキュメントレベルの同時実行、 圧縮、 スナップショットおよびチェックポイントシステム。 MongoDBのブログで比較表を見つけました。 Solarisを使用している場合を除き、WiredTigerを選択しない理由はありますか? 編集 WiredTigerとMMAPv1の内部を詳細に説明する2つのビデオが あります。


1
トランザクションと組み合わせてトリガーする
次の状況があると仮定します。 Table_Aトリガーがオンになっているテーブル(たとえば)がありINSERTます。トリガージョブはtable_B、に挿入された値に基づいていくつかの行を更新しtable_Aます。 さて、テーブルに単純に行を挿入するだけで問題ありませんが、トランザクションを介してデータを挿入する状況についてはどうでしょうか?トリガーは、すべてのトランザクションステートメントが正常に実行されるまで待機しますか、それとも挿入を認識するとすぐに起動しますか?最初の挿入を認識するとすぐにトリガーが起動する場合、最後の行でトランザクションが失敗するとどうなりますか?その状況に何らかのメカニズムがありますか?

2
COUNT句をOVER句とともに使用できますか?
次のクエリのパフォーマンスを改善しようとしています。 UPDATE [#TempTable] SET Received = r.Number FROM [#TempTable] INNER JOIN (SELECT AgentID, RuleID, COUNT(DISTINCT (GroupId)) Number FROM [#TempTable] WHERE Passed = 1 GROUP BY AgentID, RuleID ) r ON r.RuleID = [#TempTable].RuleID AND r.AgentID = [#TempTable].AgentID 現在、私のテストデータでは約1分かかります。このクエリが存在するすべてのストアドプロシージャに対する変更への入力は限られていますが、おそらくこの1つのクエリを変更することができます。または、インデックスを追加します。次のインデックスを追加してみました。 CREATE CLUSTERED INDEX ix_test ON #TempTable(AgentID, RuleId, GroupId, Passed) また、実際にクエリにかかる時間は2倍になりました。NON-CLUSTEREDインデックスでも同じ効果が得られます。 効果なしで次のように書き直してみました。 WITH …

4
1つの列を読み取り専用にすることは可能ですか?
絶対に変更できない列を持つテーブルを作成することは可能ですが、テーブルの他の列は可能です。 たとえば、CreatedByUser変更しないカラムを想像できます。 このためにSQL Serverに組み込みの機能がありますか、それともトリガーなどを介してのみ可能ですか?
25 sql-server 

3
Postgresqlで現在のユーザーが所有するすべてのスキーマのすべてのテーブルをリストするにはどうすればよいですか?
私はすべてのスキーマのすべてのテーブルをリストすることができます > \dt *.* しかし、それはまた、私が気にする私のテーブルよりもはるかに多いシステムテーブルをリストしています。パブリックスキーマおよび定義したスキーマで作成したすべてのテーブル(および場合によってはビュー)が欲しいです。 ここで説明するように、スキーマを作成するときに検索パスに明示的にスキーマを追加することなく、これを行う方法を見つけたいと思っています。 /programming//a/12902069 編集: 受け入れられた答えに基づいて、次のビューを作成しました。 create view my_tables as select table_catalog, table_schema, table_name, table_type from information_schema.tables where table_schema not in ('pg_catalog', 'information_schema'); そして今、次のコマンドは私が欲しいものを与えてくれます: select * from my_tables;

1
ライブprodテーブルのvarcharの長さを変更する
現在、実稼働アプリで使用されているMS SQL Server 2008 R2 DBサーバーがあります。 アプリの新しい拡張機能varchar(100)では、テーブルの列の長さを増やす必要があります。 現在のデータに影響を与えずに、prod DBのこの既存の列の長さを増やすことはできますか? サービスの中断を避けるために、この変更は営業時間外に完了する必要がありますか?

2
列をNOT NULLからNULLに変更する-内部で何が起こっているのでしょうか?
2.3B行のテーブルがあります。列をNOT NULLからNULLに変更したいと思います。列は1つのインデックスに含まれます(クラスター化インデックスまたはPKインデックスではありません)。データ型は変更されていません(INTです)。ただnullability。ステートメントは次のとおりです。 Alter Table dbo.Workflow Alter Column LineId Int NULL 操作は、停止する前に10を超えます(ブロッキング操作であり、時間がかかりすぎたため、完了まで実行することすらまだできていません)。テーブルを開発サーバーにコピーして、実際にかかる時間をテストします。しかし、NOT NULLからNULLに変換する際にSQL Serverが内部で何をしているのかを誰かが知っているのか興味がありますか?また、影響を受けるインデックスを再構築する必要がありますか?生成されたクエリプランは、何が起こっているのかを示していません。 問題のテーブルはクラスター化されています(ヒープではありません)。

2
MySQLで「ibfk」は何を表していますか?
phpmyadminでテーブル 'photos'の外部キー制約を作成すると、後で制約の名前が 'photos_ibfk_1'になり、次の制約が 'photos_ibfk_2'などと呼ばれることがわかります。これから、[tablename] _ibfk_constraintIndexがMySQLのDB制約の規則。これは正しいです?IBFKは何の略ですか?

2
MongoDBとPostgreSQLを一緒に使用する
私の現在のプロジェクトは、基本的に工場文書管理システムの実行です。 とはいえ、いくつかのしわ(驚き、驚き)があります。いくつかのしわはプロジェクトにかなり固有のものですが、標準的な答えを持たない(とにかく見つけることができる)一般的な観察と質問がいくつかあり、それはより広い問題領域に適用できると思います。ここにはたくさんあり、StackExchangeのQ&A形式に適しているかどうかはわかりませんが、a)答えられる質問であり、b)コミュニティに役立つほど具体的でないと思います。私の考慮事項のいくつかは私に固有のものですが、この質問は、SQLとNoSQLとその両方を決定することに直面している人にとって役に立つと思います。 背景: 作成しているWebアプリには、本質的に明らかにリレーショナルなデータと、ドキュメント指向のデータが含まれています。ケーキを持って食べたいです。 TL; DR:以下の#5は匂いテストに合格すると思います。あなたは?単一のアプリケーションでSQLとNOSQLをこのように統合した経験はありますか?このクラスの問題に対するすべての可能なアプローチを以下にリストしようとしました。有望な代替案を見逃していませんか? 複雑さ: 文書には多くの異なるクラスがあります。要件はすでに何十もの異なる文書を要求しています。この数は増えるだけです。可能な限り最良のケースは、ドメイン専門家がDBAやプログラマの介入なしに新しいドキュメントクラスの追加を処理できるように、単純なドメイン固有の言語、コード生成、および柔軟なスキーマを活用できるケースです。(注:Greenspunの第10規則を順守していることを既に認識しています) 以前の正常な書き込みの整合性は、プロジェクトの中心的な要件です。データはビジネスに不可欠です。書き込みに関するACIDの完全なセマンティクスは、正常に書き込まれたものが書き込まれたままであれば、犠牲になる可能性があります。 文書自体は複雑です。特定のケースのプロトタイプドキュメントでは、ドキュメントインスタンスごとに150以上の個別のデータを保存する必要があります。病理学的症例は1桁悪化する可能性がありますが、確かに2ではありません。 単一クラスのドキュメントは、後の時点で更新の対象となる移動ターゲットです。 Djangoをリレーショナルデータベースにフックすると、無料のものが好きです。django-nonrelフォークを使用するために2つのDjangoバージョンに戻る必要なく、景品を保持したいと思います。1.3にダウングレードするよりも、ORM全体をダンプする方が望ましいです。 本質的には、リレーショナルデータ(ユーザー、グループなどの典型的なWebアプリのもの、および複雑なクエリをリアルタイムで切り刻むことができる必要があるドキュメントメタデータ)とドキュメントデータ(たとえば、参加やクエリに関心のない数百のフィールド-データの唯一のユースケースは、入力された単一のドキュメントを表示することです。 私は私の好みの方法で健全性チェック(あなたが私の投稿履歴をチェックする場合、私はDBAではないという事実についてかなり明確です)を行い、他の解決のために出会ったすべてのオプションを列挙したかったですリレーショナルデータと非リレーショナルデータの両方を含む、ほぼ同様の問題。 提案されたソリューション: 1.ドキュメントクラスごとに1つのテーブル 各ドキュメントクラスは、すべてのメタデータとデータの列を持つ独自のテーブルを取得します。 利点: 標準のSQLデータモデルが使用されています。 リレーショナルデータは可能な限り最適な方法で処理されます。必要に応じて後で非正規化します。 Djangoのビルトイン管理インターフェイスはこれらのテーブルを内省することに慣れており、ORMは100%のデータをそのまま使用できます。 短所: メンテナンスの悪夢。数千(数十?)の列を持つ数十(数百?)のテーブル。 どのテーブルに書き込むかを正確に決定するアプリケーションレベルのロジック。テーブル名をクエリのパラメータにすることは悪臭を放ちます。 基本的に、すべてのビジネスロジックの変更にはスキーマの変更が必要です。 病理学的なケースでは、複数のテーブルにまたがる単一のフォームのデータをストライピングする必要があるかもしれません(参照:PostgreSQLテーブルの列の最大数は?)。 私たちはおそらく、人生と私たちを憎むことになるであろう本当の、神に正直なDBAを見つけるために行く必要があるでしょう。 2. EAVモデリング フィールドテーブルのみがあります。エンティティー属性値のモデリングはすでに十分に理解されています。完全を期すために含めました。2013年に開始される新しいプロジェクトは、意図的にEAVアプローチを採用するとは思わない。 利点: モデル化が簡単。 短所: クエリがより困難です。 DBレイヤーには、1つのアプリレベルのオブジェクトを構成するものを簡単に表現することはなくなりました。 DBレベルの制約チェックが失われます。 1つのテーブルの行数は、100〜1000倍の速度で増加します。おそらく将来の問題点はパフォーマンス面です。 限られたインデックス付けが可能。 ORMに関する限り、DBスキーマは無意味です。Webアプリのものを含むバッテリーは保持されますが、カスタムデータモデルにはカスタムクエリが必要になります。 3. PostgreSQL hstoreまたはjsonフィールドを使用します これらのフィールドタイプのいずれかは、リレーショナルDBのコンテキスト内でスキーマレスデータを格納するためのトリックを行います。私はすぐにこの溶液にジャンプしない唯一の理由は、(バージョン8.4それほどではないに導入された比較的新しいですその新しい)、私はそれにゼロ以前のエクスポージャーを持っていると私は疑わしいです。Mongoはドキュメント間の参照を処理できますが、簡単に正規化されたすてきなデータをすべてMongoに投げるのが不安になるのとまったく同じ理由で、間違っていると思います。 利点: Django ORMと組み込みの認証およびセッション管理の利点を活用できます。 すべてが、以前に他のプロジェクトで正常に使用した1つのバックエンドに残ります。 短所: 個人的にはこれに関する経験はありません。 あまり使用されている機能のようには見えません。NOSQLソリューションを検討している人々にはかなり推奨されているように見えますが、選択されているという証拠はあまりありません。これは、私が何かを見逃しているに違いないと思うようにします。 …

1
Mysql Innodb:InnoDB:エラー:最後のチェックポイントの経過時間はInnoDB:ロググループの容量を超えています
mysqlの専門知識が本当に必要です。私はmysqlの初心者であり、過去1週間にdbのサーバークラッシュが発生しています。 Ubuntuでmysql 5.1.36を使用しています。これは、デュアルコア、4GBメモリ、40GB SSDを備えた専用mysqlサーバーです。 ログエラーは次のとおりです。 120413 23:57:15 [Note] Plugin 'FEDERATED' is disabled. 120413 23:57:15 [Warning] option 'innodb-autoextend-increment': unsigned value 2000 adjusted to 1000 120413 23:57:15 InnoDB: Initializing buffer pool, size = 2.9G 120413 23:57:15 InnoDB: Completed initialization of buffer pool 120413 23:57:16 InnoDB: Started; log sequence number 0 44234 120413 …
25 mysql  innodb 

3
SELECT-UPDATEパターンを使用する場合の同時実行性の管理
次のコードがあるとしましょう(ひどいことは無視してください): BEGIN TRAN; DECLARE @id int SELECT @id = id + 1 FROM TableA; UPDATE TableA SET id = @id; --TableA must have only one row, apparently! COMMIT TRAN; -- @id is returned to the client or used somewhere else 私の目には、これは並行性を適切に管理していません。トランザクションがあるからといって、更新ステートメントに到達する前に他の誰かがあなたと同じ値を読み取らないということにはなりません。 今、コードをそのままにしておきます(これは単一のステートメントとして処理するか、自動インクリメント/ ID列を使用することをお勧めします)並行性を適切に処理し、2つのクライアントが同じになる競合状態を防ぐ確実な方法id値? WITH (UPDLOCK, HOLDLOCK)SELECTにa を追加するとうまくいくと確信しています。SERIALIZABLEトランザクション分離レベルは、(それは誰にもTRANが終わるまで、あなたが何をしたか読むことを拒否したことから、同様の作業に思えるでしょうUPDATE:これは偽であることがわかりマーティンの答え)。本当?どちらも同等に機能しますか?一方が他方よりも優先されますか? IDの更新よりも正当なもの、つまり更新が必要な読み取りに基づいた計算を行うことを想像してください。多数のテーブルが関係している可能性がありますが、そのうちのいくつかは書き込みを行い、他のテーブルは書き込みを行いません。ここでのベストプラクティスは何ですか? この質問を書いた後、必要なテーブルのみをロックしているので、ロックヒントの方が優れていると思いますが、誰かの入力に感謝します。 PSそして、いいえ、私は最良の答えを知りません、そして、本当に、より良い理解を得たいです!:)

3
innodb_file_format Barracuda
もっとよく知っている人たちにいくつか質問があります。私のインスタンスのほとんどは、Barracudaをサポートしているにもかかわらず、Antelopeを実行しています。 私はいくつかの圧縮innodbテーブルをいじりたいと思っていました。私の理解では、これはBarracuda形式でのみ利用可能です。 innodb_file_formatは動的なので、バウンスせずに切り替えることができます。これを行うことの影響はありますか?私が知ることができるのは、新しいテーブルまたは後で変更されるテーブルがそのフォーマットで作成されるということです。これはすべて正しいですか? 私はすべてのテーブルを通過して変換する必要がないことを望んでいました。コーシャは、同じテーブルスペースにアンテロープとバラクーデのテーブルを共存させるのですか?それが機能していても、注意すべき点はありますか? 私がテストから読んで集めたものからの答えは次のとおりです。はい。はい。よく分かりません。 更新 この投稿以降、さまざまなインスタンスでいくつかの動的テーブルと圧縮テーブルを使用して実行していますが、問題はありません。さらに 、その時点でhttp://dev.mysql.com/doc/refman/5.5/en/innodb-file-format-identifying.htmlを読むことを怠りました。 特定のinnodb_file_formatを有効にすると、この変更は既存のテーブルではなく、新しく作成されたテーブルにのみ適用されます。新しいテーブルを作成する場合、テーブルを含むテーブルスペースには、テーブルの機能に必要な「最も早い」または「最も簡単な」ファイル形式のタグが付けられます。たとえば、Barracudaのファイル形式を有効にし、圧縮されておらずROW_FORMAT = DYNAMICを使用しない新しいテーブルを作成すると、テーブルを含む新しいテーブルスペースにはAntelopeファイル形式を使用するタグが付けられます。 したがって、Barracudaを許可した場合でも、テーブルはAntelopeとして作成されます。すべてのテーブルをrow_format動的または圧縮テーブルとして指定しない限り、混合は避けられません。 最初のBarracudaテーブルを導入するときに、完全なダンプとリロードを行う必要があることを示すものはありません(mysqlのメジャーバージョンをアップグレードするときに推奨されます)。

1
SQL Azureの既存の主キーを変更するにはどうすればよいですか?
SQL Azureテーブルの既存のプライマリキーを変更したい。 現在、1つの列があり、別の列を追加したいと思います。 さて、SQL Server 2008では、これは簡単なことでした。SSMSでやっただけです。できた これは、SQL Serverからスクリプトを作成した場合のPKの外観です。 ALTER TABLE [dbo].[Friend] ADD CONSTRAINT [PK_Friend] PRIMARY KEY CLUSTERED ( [UserId] ASC, [Id] ASC ) ただし、SQL Azureでは、上記を実行しようとすると、もちろん失敗します。 Table 'Friend' already has a primary key defined on it. 結構です、私はキーを落とそうとします: Tables without a clustered index are not supported in this version of SQL Server. …

1
レポートサービスとアプリケーションロール
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 最初のポスター、長い時間はここに潜んでいます。レポートでアプリケーションロールをアクティブにする最良の方法は何ですか? 私はさまざまなことを試しましたが、これまでのところ、動作する唯一の方法は、そのようなアプリケーションロールへの呼び出しを埋め込むことです:- EXEC sp_setapprole 'REPORTZ', 's3cr3t'; select * from mytable where ID < 10000 データセット内。それは機能します...しかし、私の好みではありません(私は実稼働環境にロールバックしたい形ではありません)。 カスタムアセンブリまたはレポートサービスのいずれかの種類の「サーバーフック」を介して、実行時にアプリケーションロールのアクティベーションラインを何らかの方法で「ハイジャック」または「インジェクト」できることを希望します(どちらの場合も、 ) あなたの時間と親切な注意に感謝します。 YS。
25 sql-server  ssrs  role 

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