データベース管理者

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

2
実行時にbinlog形式を切り替える最も安全な方法は何ですか?
次の警告のためmysqld.log: [警告] BINLOG_FORMAT = STATEMENT以降、ステートメント形式を使用してバイナリログに書き込まれる安全でないステートメント。このステートメントは、LIMIT句を使用しているため安全ではありません。含まれる行のセットを予測できないため、これは安全ではありません。 レプリケーション形式をに切り替えたいMIXED。 しかし、MySQLドキュメントによると: テンポラリテーブルが存在する場合、実行時にレプリケーション形式を切り替えることはお勧めしません。テンポラリテーブルは文ベースのレプリケーションを使用する場合にのみ記録され、行ベースのレプリケーションでは記録されないためです。 したがって、問題は、バイナリログ形式を安全に切り替えるために一時テーブルが存在するかどうかをどのように識別できるかです。

3
多言語のWebサイトではどの照合を選択する必要がありますか?
照合はクエリ速度に影響を与えますか?照合順序によってテーブルのサイズは変わりますか? 推奨される照合となる可能性のあるすべての言語(たとえば、Googleの場合)をサポートする必要があるWebサイトを構築する場合はどうすればよいですか? などの文字を保存する必要があり日本語ます。ウェブサイトでの検索somethingではsóméthíng入力のために戻る必要があり、大文字と小文字を区別しない必要があります。 どれが最良の選択であるかをどのようにして知ることができますか?このケースに適した照合はどれですか?

3
ルックアップテーブルの適切な使用
データベースでルックアップテーブルを使用するタイミングと場所に適切な境界を設定する方法を正確に把握するのに苦労しています。私が見たほとんどの情報源は、あまり多くのデータを保持することはできないと言っていますが、ある時点で、データベースは非常に多くの部分に分割されるように見えるため、効率的ではあるが、管理できなくなります。ここに私が取り組んでいるもののスローされた例があります: Employeesというテーブルがあるとします。 ID LName FName Gender Position 1 Doe John Male Manager 2 Doe Jane Female Sales 3 Smith John Male Sales データがより複雑で、数百の行が含まれていると仮定します。ルックアップテーブルに移動できる最も明らかなものは、Positionです。Positionsというテーブルを作成し、Positionsテーブルの外部キーをPositions列のEmployeesテーブルに貼り付けることができます。 ID Position 1 Manager 2 Sales しかし、情報が管理不能になる前に、どの程度まで情報を小さなルックアップテーブルに分解し続けることができますか?別のルックアップテーブルで、性別テーブルを作成し、1を男性に、2を女性に対応させることができます。LNameとFNameをテーブルに入れることさえできました。すべての「John」エントリは、ID 1がJohnに対応することを示すFNameテーブルを指す外部キー1に置き換えられます。ただし、このウサギの穴をあまりにも下に移動すると、Employeesテーブルは大量の外部キーになります。 ID LName FName Gender Position 1 1 1 1 1 2 1 2 2 2 3 2 1 1 …

8
テストデータの大規模なデータセットを生成するツール[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のStack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 効率的なデータベース設計を考えようとするとき、2つのサンプルデータベースを構築し、それらにデータを入力し、それらに対していくつかのクエリを実行して、どちらのパフォーマンスが優れているかを確認することが最善の方法です。 (理想的にはデータベースに直接)大規模(〜10,000レコード)のテストデータセットを比較的迅速に生成するツールはありますか?少なくともMySQLで動作するものを探しています。

3
Windows 2008R2上のSQL 2008R2の推奨ページファイルサイズ
このMicrosoftの記事-64ビットバージョンのWindows Server 2008またはWindows 2008 R2の適切なページファイルサイズを決定する方法は、64ビットWindows 2008およびWindows 2008R2のページファイルサイズを計算するためのガイダンスを提供します。これは間違いなく汎用サーバーでうまく機能します。Windows 2008 / R2 64ビットで実行されているSQL Server 2008R2のガイダンスは何ですか? メモリ内のデータがページファイルにほとんどヒットしないようにすると、SQLがデータを取得するためにディスクに2回ヒットする可能性があります。SQL Serverでは、メモリ内のデータがページファイルにヒットすることさえ許可していますか?私はを通じて狩りをしましたSQL Server 2008 R2のオンラインブック指導のためにまだページファイルの使用の一切の言及を発見していません。 潜在的な使用シナリオは次のとおりです。物理サーバーに64GBのRAMがある場合、64GBのRAM全体にページファイルが必要ですか?96GBのページファイルに対応する必要がありますか?これは、単一のファイルでは少し過剰に思えます。私は、Windowsがページファイルをメモリに結合して、RAM上のアプリをより簡単にスワップアウトしようとするのが常識であったことを知っていますが、それは本当ですか?ここでは64GB未満のページファイルでパフォーマンスが低下しますか?

4
多くのビューでDEFINERを変更する
更新後にデータベースのバックアップに問題があります。私はシステムをいじって、その理由を探っています。実行した1つのクエリでこの結果が返されました。 Got error: 1449: The user specified as a definer ('cittool'@'%') does not exist when using LOCK TABLES いくつかの調査の後、これらのビューの定義者は、システムから削除された古い開発者アカウントであるようです。この問題が発生したデータベースとビューは非常にまれにしか使用されず、ほとんどはアーカイブ目的で保持されています。 約40個のビューが存在しますが、それらはもはや存在しません。一度にすべての定義者を別のアカウントに変更する簡単な方法はありますか?mysqldumpですべてのビューをファイルに単純にダンプして、そのファイルを編集してビューを再作成できるようにする方法はありますか?
25 mysql  view 

6
sysadminアカウントが存在しないときにSQL Server 2008でユーザーにsysadminを追加する方法
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 SQL Server 2008インスタンスを実行しています。残念ながら、テスト中にログインのsysadmin権限を選択解除しましたが、現在はそれを読み取ることができません(sysadmin権限がないため)。 SAを除き、インスタンスの他のsysadminアカウントはありません。 Windows認証のみを設定したので、レジストリのLoginModeを2にハッキングして、SQL認証を使用してSAとしてログインできるようにしました。これにより実際にログインモードがMixedに設定されますが、SAユーザーはデフォルトで無効になっており、sysadmin権限がないため、再度有効にすることはできません。 システム管理者を取得して通常のアカウントに再割り当てできるように、SAログインを有効にするにはどうすればよいですか?このレジストリ設定もありますか、それともmasterデータベースに保存されていますか?

3
SQL Serverでアプリロックリクエストをキャンセルするにはどうすればよいですか?
sp_getapplockストアドプロシージャは、次の戻り値があります。 0:ロックは同期的に正常に許可されました。 1:他の互換性のないロックが解放されるのを待った後、ロックが正常に許可されました。 -1:ロック要求がタイムアウトしました。 -2:ロック要求はキャンセルされました。 -3:ロック要求がデッドロックの犠牲者として選択されました。 -999:パラメーターの検証またはその他の呼び出しエラーを示します。 sp_getapplockデータアクセスレイヤーで呼び出すためのラッパーを書いています。どのような状況で-2が返されるのかを知りたいので、説明的で役立つ例外をスローできます。-1と-3の戻り値の意味は明らかであり、これらの値が返されるテスト条件を簡単に作成できます。どのようにして-2の戻り値を取得できますか?

2
PostgreSQLデータベースに対するLC_CTYPEの影響は何ですか?
そのため、PostgreSQLを搭載したDebianサーバーはほとんどありません。歴史的に、これらのサーバーとPostgreSQLはLatin 9文字セットでローカライズされていましたが、当時は問題ありませんでした。現在、ポーランド語、ギリシャ語、中国語などを処理する必要があるため、それを変更することは大きな問題になります。 UTF8データベースを作成しようとすると、次のメッセージが表示されました。 エラー:UTF8のエンコードはロケールfr_FRに一致しません詳細:選択したLC_CTYPE設定にはLATIN9のエンコードが必要です。 私は昔のパルグーグルでいくつかのテーマについて調査しましたが、Debianの更新LANG、正しい文字セットでのPostgreSQLの再コンパイル、すべてのLC_システム変数およびその他のあいまいなソリューションの編集など、複雑すぎる手順しか見つかりませんでした。とりあえず、この問題はさておきましょう。 最近、それは再び戻ってきました。ギリシャ人は物を望み、ラテン語9は望んでいません。そして、私がこの問題を再び検討している間に、ある同僚が私のところに来て、「ええ、簡単だ、見て」と言いました。 彼は何も編集せず、手品をしませんでした。彼はこのSQLクエリを作成しました。 CREATE DATABASE my_utf8_db WITH ENCODING='UTF8' OWNER=admin TEMPLATE=template0 LC_COLLATE='C' LC_CTYPE='C' CONNECTION LIMIT=-1 TABLESPACE=pg_default; そして、それはうまくいきました。 私は実際には知りLC_CTYPE='C'ませんでしたが、これがGoogleの最初のソリューションやStack Overflowでも使用されていないことに驚きました。私は周りを見回しましたが、PostgreSQLのドキュメントに言及しているだけです。 LC_CTYPEがCまたはPOSIXの場合、任意の文字セットが許可されますが、LC_CTYPEの他の設定では、正しく機能する文字セットは1つだけです。LC_CTYPE設定はinitdbによって凍結されるため、クラスターの異なるデータベースで異なるエンコードを使用するための明らかな柔軟性は、CまたはPOSIXロケールを選択する場合を除いて、実際よりも理論的です(したがって、実際のロケール認識を無効にします)。 だから、これはあまりにも簡単で完璧すぎると思いました。マイナス面は何ですか?そして、私はまだ答えを見つけるのに苦労しています。だからここに投稿します: tl; dr:特定のローカライズで使用LC_CTYPE='C'することのマイナス面は何ですか?そうするのは悪いですか?私は何を壊すことを期待すべきですか?

1
PostgreSQLでディスク領域を再利用するにはどうすればよいですか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 5年前に移行され ました。 私はccaを持っていたいくつかのテーブルを持つ9.1データベースのローカルインストールを持っています。300のmioレコードとデータベースは約20 GBに成長しました。その後、delete fromすべてのレコードを削除するコマンドを発行しました(使用する必要がありましたがtruncate、それを知りませんでした)。だから、ディスク領域を再利用するためにdbを完全に空にしましたが、それはまったく役に立ちません。私の問題はこれと同じように見えますが、解決策は提供されていません。私はすでにこのスレッドと「ディスク領域の回復」に関するドキュメントをチェックしましたが、それでも解決策が見つかりません。このコードを使用して、すべてのテーブルのサイズを取得します SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND C.relkind <> 'i' AND nspname !~ '^pg_toast' ORDER BY pg_total_relation_size(C.oid) DESC LIMIT 15; …

2
MySQLのトランザクションDDLワークフロー
私は少しはDDL文(ことを発見して驚いたalter table、create indexなど)が暗黙のMySQLで現在のトランザクションをコミットします。MS SQL Serverから来て、トランザクションでデータベースの変更をローカルで行う機能(その後ロールバックされた機能)は、ワークフローの重要な部分でした。継続的な統合では、何らかの理由で移行が中断した場合にロールバックが使用されたため、少なくともデータベースが半分移行された状態のままになりませんでした。 MySQLを移行と継続的インテグレーションで使用する場合、これら2つの問題をどのように解決しますか?

4
MySQLリレーログが破損しています。どうすれば修正できますか?試したが失敗した
マシンが突然シャットダウンすると、MySQL v5.1.61リレーが破損しました。修正しようとしましたが、うまくいきませんでした。 —どうすれば修正できますか?私は何か間違ったことをしましたか? 私が読んだ限り、破損したMySQLリレーログは簡単に修正されます。 change master to master_log_file='<Relay_Master_Log_File>', master_log_pos=<Exec_Master_Log_Pos>; どこRelay_Master_Log_FileでExec_Master_Log_Posリストは次のとおりです。 mysql> show slave status; しかし、私がやったとき change master status ...そうすると、プライマリキー違反エラーが発生しました。そんなことがあるものか?上記の手順は正しくありませんか? (今のところ、マスターからスレーブに--master-data mysqldumpを再インポートするだけで問題は解決しました。しかし、将来的には、これを行うのは適切ではないかもしれません。) ここに私の特定の問題に関する詳細が続きます: mysql> show slave status \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: the-master-host Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000021 Read_Master_Log_Pos: 33639968 …

3
ナチュラルキーは、代理整数キーよりもSQL Serverで高いまたは低いパフォーマンスを提供しますか?
私はサロゲートキーのファンです。私の発見が確認バイアスのリスクがある。 こことhttp://stackoverflow.comの両方で見た多くの質問では、IDENTITY()値に基づく代理キーの代わりに自然キーを使用しています。 コンピューターシステムの私のバックグラウンドは、整数の比較演算を実行すると、文字列を比較するよりも高速になることを教えてくれます。 このコメントは私の信念に疑問を投げかけたので、整数はSQL Serverのキーとして使用する文字列よりも高速であるという仮説を調査するシステムを作成すると思いました。 小さなデータセットでは識別可能な差はほとんどないため、プライマリテーブルに1,000,000行、セカンダリテーブルにプライマリテーブルの各行に10行、合計で10,000,000行の2つのテーブル設定を考えました。二次テーブル。私のテストの前提は、このような2つのテーブルセットを作成することです。1つは自然キーを使用し、もう1つは整数キーを使用し、次のような簡単なクエリでタイミングテストを実行します。 SELECT * FROM Table1 INNER JOIN Table2 ON Table1.Key = Table2.Key; 以下は、テストベッドとして作成したコードです。 USE Master; IF (SELECT COUNT(database_id) FROM sys.databases d WHERE d.name = 'NaturalKeyTest') = 1 BEGIN ALTER DATABASE NaturalKeyTest SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE NaturalKeyTest; END GO CREATE DATABASE NaturalKeyTest ON …

2
ALTER TABLE CHECK CONSTRAINT
SQL Serverのオブジェクトエクスプローラーから、外部キー制約を選択してスクリプトを作成すると、次のコードが生成されます。 USE [MyTestDatabase] GO ALTER TABLE [dbo].[T2] WITH NOCHECK ADD CONSTRAINT [FK_T2_T1] FOREIGN KEY([T1ID]) REFERENCES [dbo].[T1] ([T1ID]) GO ALTER TABLE [dbo].[T2] CHECK CONSTRAINT [FK_T2_T1] GO 最後のステートメント「ALTER TABLE CHECK CONSTRAINT」の目的は何ですか?実行されるかどうかは問題ではないようです。既存の不良データでは失敗せず、新しいデータに制約が適用されることも変わりません。 ありがとう!

4
製品タイプごとに個別のテーブルを作成するかどうか
私はデータベースを設計している最中であり、最初の設計決定について再考しています... 製品タイプは次のとおりです...モデル、部品、交換部品キットおよびオプション。 オプションA(最初の設計):上記の製品タイプ用に別々のテーブルを用意する予定でした。各テーブルでフィールドの約75%が同じになると思います。 それらの間に作成する必要がある関連付けのため、各製品タイプを個別のテーブルとして作成しました。たとえば、モデルには多くのオプションがあり、オプションには多くのモデルがあります。オプションには多くのパーツを含めることができ、パーツには多くのオプションを含めることができます...など... オプションB:個別のテーブルを作成する代わりに、モデル、パーツ、交換パーツキットおよびオプションを含むProductというテーブルを作成できます。モデルやオプションなどを区別するために、typeというフィールドを1つ持つことができます。特定の製品タイプでは、いくつかのフィールドが使用されない(nullのままになる)ことになると思います。私はこれが「ベストプラクティスではない」が出てくる場所だと推測しています。 オプションBは、db設計の複雑さを大幅に軽減します。また、クエリのためにデータを引き出すときに、大量のテーブルを参照することを心配する必要もありません...

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