データベース管理者

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

1
NOT NULLで定義されたMySQL列はnullを許可しています
しばらく前にテーブルを作成し、そこにデータを追加し始めました。最近、新しい列(address)をNOT NULL新しい列の一部として追加しました。古い行(追加前)は依然としてnullであり、定義の一部として警告が作成されました。ただし、新しい列を含む新しい行はnullを挿入できます。 新しい列の追加前のnullは許可されていますか?もしそうなら、前にあったとしてもそれを許可しないようにMySQLに指示する方法はありますか? mysql> show create table my_table\G *************************** 1. row *************************** Table: my_table Create Table: CREATE TABLE `my_table` ( `entry_id` int(11) NOT NULL auto_increment, `address` varchar(512) NOT NULL, `follow_up_to` int(11) default NULL, PRIMARY KEY (`entry_id`), KEY `follow_up_to` (`follow_up_to`), CONSTRAINT `my_table_ibfk_1` FOREIGN KEY (`follow_up_to`) REFERENCES `my_table` (`entry_id`) ON UPDATE CASCADE …
8 mysql  null 

2
挿入が多いInnoDBテーブルがCPUをすべて使用しない
パケットログデータベースを持っていますが、ほとんど照会されません。挿入時に高速である必要があります。ACIDコンプライアンスを維持したいので、InnoDBを使用しています。1つのパケットを失うだけでも、お客様に損害を与える可能性があるからです。パフォーマンス調整シナリオでは、複数のDB接続を介して1,000,000パケットをサーバーに送信します。しかし、my.cnfでどの設定を使用しても、12コアのシステムでmysqldプロセスが900%を超えるCPUを使用することはできません。(ボックスでは他に何も実行されていません。) 以下を設定しました innodb_file_per_table = 1 innodb_write_io_threads = 64 innodb_read_io_threads = 64 innodb_thread_concurrency = 0 MyISAMを使用すると、すべてのパケットを約6秒で書き込むことができます。しかし、InnoDBは約25必要です。MySQLに残りのシステムリソースを使用させ、より速く挿入できますか? 編集:これはテーブルのスキーマです: +-------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------------------+------+-----+---------+-------+ | t | bigint(20) unsigned | YES | | NULL | | | a | char(1) | YES | …

3
SQL Server 2008または2012をどのようにスケーリングしますか?
SQL Server 2008(または2012)をどのようにスケーリングしますか?基本的に、2つのオプションがあることを理解しています。 拡大する: CPUがバインドされている場合、1 CPUコアから2から4に明らかになります。または、RAM使用量が急増している場合は、RAMを追加するだけです。SQL Server 2008/2012は、アプリケーションレベルの変更がないと想定して、実際にスラックを取り、そのようにスケールアップしますか?憶測を最小限に抑えるために、CPUサイクルの書き込みやクロス結合など、馬鹿げたことをしていないとしましょう。 規格外: スケールアウトがどのように機能するかは明確ではありません。私が最初のSQLサーバーのすぐ隣に別のSQLサーバーを追加した場合、クエリはどのサーバーで実行するかをどのようにして知るのですか?前面にロードバランサーはありますか(SQL Serverソフトウェアに付属していますか?)?スケールアウトを機能させるためにアプリケーションレベルの変更が必要ですか?それとも私が持っているデータをシャードとデータベース・サーバーの正しいモーニングコールは、キーをシャーディングデータに応じたことをカスタムコードを持っていますか? より経験豊富な人々からのインプットをいただければ幸いです。

2
SQL Server 2012データウェアハウジングとさまざまなバージョン
Sql Server 2012には、Enterprise Edition、Business Intelligence、Standardの3つの主要エディションがあります。 3つの完全な比較:http : //www.microsoft.com/sqlserver/en/us/future-editions/sql2012-editions.aspx ビジネスインテリジェンスエディションは、その目的がデータウェアハウジング用であることを意味し、そのための主要な懸念事項と思われるものをカバーしています。 セルフサービスビジネスインテリジェンス(アラート、Power View、PowerPivot for SharePoint Server) 高度な企業BI(表形式のBIセマンティックモデル、高度な分析とレポート、VertiPaq™インメモリエンジン) 高度なデータ統合(ファジーグループ化とルックアップ、変更データキャプチャ、高度なデータマイニング) エンタープライズデータ管理(データ品質サービス、マスターデータサービス) ただし、エンタープライズエディションは次のバージョンのみです。 データウェアハウジング(ColumnStoreインデックス、圧縮、パーティション化) これには、BIエディションとエンタープライズエディションに分離された機能が含まれますか?

1
SQL Serverで非主キーとの関係をどのように作成しますか?
私は、UserIDと呼ばれる主キーとUserNameと呼ばれる別の列の2つの列を持つUsersテーブルを持っています。 UserID(int)PK ユーザー名(varchar(256) どちらも一意ですが、他のテーブルの参照としてUserNameを使用する理由を考えました。たとえば、注文テーブルには、useridではなくUserNameによるuserへの参照があります。 OrderID ユーザー名 SQL Serverのカスケード更新/削除機能を利用できるように、UserNameとUsersテーブルを参照するすべてのテーブル間にリレーションシップを作成します。 しかし、SQL Serverでは、主キー以外の列に関係を作成できません。ユーザーテーブルを変更せずにカスケード更新/削除機能を取得して、UserNameをUserIDではなく主キーにする方法はありますか?

2
多言語ユーザーインターフェイスの背後にあるデータベース
この質問は、これらの古い質問ですでに対処されている問題よりも少し複雑な問題に関するもので、すべてが互いに重複しています。 多言語のデータベース構造の提案(2011年6月) 多言語データを保持するのに最適なデータベース構造は何ですか?(2010年2月) 多言語データベース設計のベストプラクティスは何ですか?(2009年5月) 多言語データベースのスキーマ(2008年11月) 多言語ユーザーインターフェイスをサポートする最も一般的なデータベーススキームは、すべての言語のすべての翻訳テキストを、テキストID、言語コード、およびテキスト自体の3つの列を持つ1つのテーブルに格納することです。テキストIDと言語コードが一緒になって主キーを構成します。 これで問題ありませんが、ここで複雑さを考えてみましょう。テキストが検索可能である必要があるとします。たとえば、これが多言語のeショップであるとします。つまり、データベースに入力されたすべての製品カテゴリについて、ショップの所有者は、サポートされているN言語のそれぞれに製品カテゴリの名前を入力し、買い物客は名前で製品カテゴリを検索できます。母国語で。 問題があります:照合順序。 言語によって照合順序は異なり、ある言語で機能する照合順序は別の言語では機能しません。それで、すべての言語のすべてのテキストが1つの列にある場合、どのような照合順序になりますか?特定のテキストのテキストIDを見つけるために、データベースにどのようにクエリするのでしょうか。Web製品では、検索の正確さとパフォーマンスはそれほど重要ではないかもしれませんが、この説明では、それらが本当に重要であると仮定します。 ほとんどのデータベース管理者は、「データベースの照合」という意味で照合の概念に精通しています。幸い、これは単なるデフォルトの照合であり、他の照合情報が存在しない場合に使用されますが、照合を指定できる場所が他にもあります。 SQL CREATE INDEXコマンドは、照合指定をサポートしています。(Microsoft SQL Serverがサポートしていないという噂はありますが、それについて誰か知っていますか?) SQL SELECTステートメントも照合をサポートしますが、この場合、照合仕様は関数として機能し、インデックスルックアップの代わりにインデックススキャンを引き起こします。これは、パフォーマンスが必要な場合は許容できない可能性があります。(それでも、それが私たちが持つことができる最高の場合、何もないよりはましかもしれません。) また、Microsoft SQL Serverでは、照合を指定してフィルター処理されたインデックスを作成できる非永続的な計算列を使用できると聞いていますが、これは聞いたことがなく、Microsoft-SQL-Serverのみの場合は機能については、それがどれほどクールでよく考えられていても、使用を控えたいと思います。 では、これらすべてを踏まえて、更新可能で検索可能な多言語データベースが目標である場合、データベースをどのように構成し、クエリをどのように実行するのでしょうか。 この質問は、ここで行われた議論に触発されました。nvarchar(max)がデータベースにデータを格納する方法は、一部のデータが4000文字未満の場合、どのように高速になるでしょうか。

1
なぜ人々はビューを通じて更新しないようにアドバイスされています
大学時代は、ビューを介してテーブルを更新しないように頭を悩ませられました。また、私が職場に入ったとき、ビューを通じてデータベースを更新しないように言われました。 これを行うと、パフォーマンスに大きな影響がありますか?または、これは上級開発者/ DBAがジュニア担当者に誤った結合で無意識のうちに大混乱を引き起こす可能性があるために、これを行わないように指示するケースです。 編集 私はMSSQL 2000-2008を使用しています(クライアントの詳細によって異なります)

4
MySQL Cluster RAM要件
MySQL 5.1以降、データを完全にメモリ上に置く必要がなくなりました。 インデックス付きの列(インデックス全体の構造)は引き続きメモリ内にある必要があることを読みました(MySQL High Availability、2010、pg。533、「MySQL Clusterはすべてのインデックス付きの列をメインメモリに保持する」)。 これに照らして、メモリが不足している場合(つまり、巨大なデータベース(> 100GB、または1TB)、低メモリ構成(2つのデータノード、それぞれ1GBのRAMなど)で実行されている場合)はどうなりますか?

2
nvarchar(max)がデータベースにデータを格納する方法は、一部のデータが4000文字未満の場合、どのように高速になるでしょうか?
アラビア語と英語の2つの言語をサポートするCMSを開発する必要があります。このCMSは、一種のArticle Publishingサイトになります。設計と分析中に、一部の記事が8000文字を超えることがわかりました。私のテーブルにはいくつかの列があります PageID int, PageTitleEnglish nvarchar(200), PageTitleArabic nvarchar(200), PageDescEnglish nvarchar(500), PageDescArabic nvarchar(500), PageBodyEnglish nvarchar(max) PageBodyArabic nvarchar(max) PageBodyをnvarchar(4000)として保持する場合、iaは4000文字に制限され、アラビア語バージョンを保存する必要がある場合は、16000バイトが必要です(アラビア語はUnicodeであり、ASCIIの3倍のスペースが必要です)。 そのため、PageBodyをnVarchar(max)として定義するオプションのみが残されています。これには、パフォーマンスの観点からの欠点があります。私の実際の質問は、PageBody列の一部のデータが4000文字未満である場合、インライン列のデータよりもMS SQLストアであるか、データベースで個別にあるかです。 私もこれをGoogleで探しましたが、関連する答えや、そのようなシナリオでパフォーマンスを向上させる方法は見つかりませんでした。 このような多言語CMSの設計のベストプラクティスに関する提案は大歓迎です。 サポートする必要があるのはアラビア語と英語の2言語のみです

4
認証のために「ユーザー」テーブルを分割することは良い考えですか?
私のサイトにユーザーテーブルがあり、テーブルに約200万から300万のユーザー(レコード)がいるとします。 ログインプロセスを高速化するために、1つは情報用に、もう1つはログイン用に、ユーザーテーブルを分割することをお勧めします。 次のようなクエリを1つのテーブルから実行できる場合: select username,password from users where username=`test` AND password=**** 分割する必要はありますか?これは私のサイトのログインプロセスをスピードアップしますか?

3
PostgreSQL対Oracleの高可用性ソリューション?
PostgreSQLには、RDBMSへのレプリケーションを構築するさまざまな方法を表すさまざまな高可用性オプションのマトリックスがあります。 ここにあるPostgreSQLの高可用性、負荷分散およびレプリケーション機能のマトリックス ご質問 OracleがサポートするPostgreSQL High Availability Matrixのアプローチはどれですか? OracleはPostgreSQLでは利用できない手法で高可用性を実現しますか?

5
最後に特殊文字を含むOracleソートvarchar2列
OracleでVarchar2またはNVarchar2列を独自のカスタム定義の順序に並べ替えるにはどうすればよいですか。または、最初に文字、次に数字、次にすべての特殊文字を配置する既存のオプションがあります。 最初のアプローチは、文字を数字に手動でマッピングする関数を使用することでした。 select id, sorted_column from some_table order FN_SPECIAL_SORT_KEY(sorted_column,'asc') 特殊なソート関数は、各文字を2桁の数値にマップし、戻り値はソートに使用されます。これは本当に高額な連結であるように見え、間違っているように感じます。 for i in 1..length(sorted_text) loop v_result:=v_result || case substr(sorted_text,i,1) WHEN ' ' THEN 82 WHEN '!' THEN 81 WHEN '"' THEN 80 WHEN '#' THEN 79 WHEN '$' .............. WHEN 'u' THEN 15 WHEN 'U' THEN 15 WHEN 'v' THEN …

2
SQLサーバーデータベースを読み取り専用にする利点?
私はレポートデータベースを使用しています。これは、すべての実用的な目的で読み取り専用のデータベースです。データが作成され、動的データベースが生成され、このデータベースで表示されます。 このデータベースを読み取り専用にすることを考えていました。 読み取り専用データベースに関して私が聞きたいことのいくつかは データのみが読み取り専用ですか?このデータベースにインデックスまたはビューを作成できますか? 読み取り専用データベースを使用することのパフォーマンス上の利点は何ですか?例:共有ロックなどを使用したSELECTクエリ 読み取り専用データベースを使用することの欠点はありますか? 読み取り専用データベースを使用する際に従うべきベストプラクティスはありますか?

1
グローバルフラグを指定したDBCC TRACEON
SQL Server 2005デッドロックシナリオのトラブルシューティングの質問で、DBCC TRACEON (1204, -1)デッドロックをグローバルに追跡するためにを使用する提案がありました。 BOL でこのコマンドについて読むとき、ユーザーまたはアプリケーションがシステム上でステートメントを同時に実行していないときにのみ使用する必要があることを示しています。このトレースフラグを有効にするときは、シングルユーザーモードにする必要があるということですか。そしてさらに、なぜそれが必要であり、アドバイスに従うことが重要ですか?(常に稼働している実動システムでは、従うのが少し難しいようです。)

3
「論理的差異」の定義は?
私は現在、CJ Dateの「SQL and Relational Theory」を読んでいます。そして、私は本の中でかなり遠いですが、いくつかの基本的な質問があります。「論理的差異」という用語が何を意味するのか知りたいのですが、この本では例を使って用語を説明しようとしていますが、実際にはそれが何を意味するのかは説明していません(または多分それを誤解していますか?)。 これは本の一部です: 私は関係と関係の絵の間に論理的な違いがあると言いました。論理的差異の概念は、ウィトゲンシュタインの口述に由来します。 すべての論理的な違いは大きな違いです。 私は論理的な違いが直感的に何を意味するかを知っています、私は関係と関係の絵の違いが何であるかを知っています。私が求めているのは、「論理的差異」の概念を形式的に定義したものです。その意味がよくわかります。

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