データベース管理者

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

3
ディメンションの範囲を動的に定義する
キューブを作成するたびに直面する問題があり、それを克服する方法をまだ見つけていません。 問題は、ディメンション内でハードコードすることなく、ユーザーがさまざまなものを自動的に定義できるようにする方法です。例で問題を説明します。 Customersというテーブルがあります: これはテーブル内のデータです。 ピボットスタイルでデータを表示し、以下のように定義された範囲で給与と年齢をグループ化します。 このスクリプトを作成し、範囲を定義しました。 SELECT [CustId] ,[CustName] ,[Age] ,[Salary] ,[SalaryRange] = case when cast(salary as float) <= 500 then '0 - 500' when cast(salary as float) between 501 and 1000 then '501 - 1000' when cast(salary as float) between 1001 and 2000 then '1001 - 2000' when cast(salary …

3
VARCHAR列のサイズを小さくすることに意味はありますか?
VARCHAR2Oracleの列のサイズがパフォーマンスに影響するかどうかに関係なく、あちこちでグーグルでレポートが混在しているようです。 VARCHARサイズの問題に少しひねりを加えたいと思います。 (複数行)フリーテキストフィールド(与えられていないあなたは(オラクル)データベースに格納することを名前のような短いもの)、内の任意の点(WRT。パフォーマンスやそれ以外)が存在しない限界いっぱいまでVARCHAR(容量VARCHAR2(4000)Oracleの上に)が、選択は、とにかく98%のケースで十分であるため、1024や512などの小さい値。

4
SQL Serverの最大メモリがRAMの使用を制限しない
これについてのご意見をお願いします。SQL Server 2008r2 Entがあります。エド。16コアおよび64GB RAMを備えた64ビット。20111014の時点で完全に修正されたSQLサーバーのインスタンスが1つあります。 最大RAMは60000MBに設定されています。オンラインで数日後のタスクマネージャーによると、フリーラムの量は0です。 最大RAMを53GB未満に変更すると、数日後に安定し、空きRAMが確保されます。 タスクマネージャーに従ってRAMを割り当てるのは、SQLプロセスです。問題が実際に何であるかをどのように判断しますか?言うまでもなく、私は既に多くのテストを行ったが、これを私の好みにまだ解決していない。また、使用可能なRAMが0になったときに、通常のメモリ不足が発生することはありません。 更新1: このページ/dba//a/7062/2744の RAMに関する別のQ / Aに触発されました。これら2つを使用して、RAMの用途を確認しました。 SELECT TOP ( 10 ) [type] AS [Memory Clerk Type] , SUM(single_pages_kb) AS [SPA Mem, Kb] FROM sys.dm_os_memory_clerks GROUP BY [type] ORDER BY SUM(single_pages_kb) DESC OPTION ( RECOMPILE ) ; SELECT DB_NAME(database_id) AS [Database Name] , COUNT(*) …

3
PostgreSQL 9.1でのフェールオーバーの自動化
PostgreSQL 9.1で自動フェイルオーバー用に2つの同一サーバーをセットアップする方法。 OS ソースからコンパイルされたCentos 5 PostgreSQL 9.1 postgresユーザーアカウントは両方のマシンに存在し、両方のマシンに接続するためのパスワードなしのsshキーを持っています。 私の現在の設定: マスターサーバーの構成: postgresql.conf: listen_address = '*' wal_level = hot_standby max_wal_senders = 3 checkpoint_segments = 16 wal_keep_segments = 8 archive_mode = on archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"' pg_hba.conf: host replication all 10.0.66.1/32 trust host replication all 10.0.66.2/32 trust スタンバイサーバー postgresql.confとpg_hba.confは、マスターサーバーで構成されているものと同じです。 recovery.conf: standby_mode = …

3
エラーメッセージの「SET」の意味「NULL値は集計またはその他のSET操作によって削除されます」
今日、同僚のスクリプトを実行しているときに、上記の「ANSI警告」メッセージが表示されました(そして、多くのステートメントのどれが警告を表示したのかわかりません)。 過去に私はそれを無視していました。私はヌルを自分で避けているので、それらを排除するものは私の本では良いことです!しかし、今日、「SET」という言葉が文字通り私に叫び、私はこの文脈でその言葉の意味が何を意味するのかわからないことに気付きました。 私が最初に考えたのは、大文字であるという事実に基づいて、SETキーワードを参照しており、「割り当て」を意味しているということです。 UPDATE <table> SET ... ...ON DELETE SET NULL... SET IDENTITY_INSERT <table> ON SQL Serverヘルプによると、「ANSI警告」機能はISO / ANSI SQL-92に基づいています。この仕様では、サブセクションのタイトル、つまりタイトルの場合、データ割り当てセクション。ただし、エラーメッセージをすばやくグーグルで調べた後、SELECT割り当てが関係していないように見えるクエリの例を見ることができます。 SQL Serverの警告の文言に基づいた私の2番目の考えは、集合の数学的意味が暗示されているということでした。ただし、SQLの集約が厳密に言うと集合演算であるとは思いません。SQL Serverチームがそれを集合演算であると見なしている場合でも、「集合」という単語を大文字にする目的は何ですか? グーグル検索中に、SQL Serverのエラーメッセージに気付きました。 Table 'T' does not have the identity property. Cannot perform SET operation. ここでの同じケースでの「SET操作」という同じ言葉は、IDENTITY_INSERTプロパティの割り当てを指しているだけで、最初の考えに戻ります。 誰かが問題に光を当てることはできますか?
18 sql-server 

2
トリガー:削除された行をアーカイブテーブルに移動する
restrictionsPostgreSQLデータベースで呼び出される小さな(〜10行)テーブルがあり、値が毎日削除および挿入されます。 restrictions_deletedから削除されるすべての行がrestrictions自動的に保存されるというテーブルが必要です。以来、restrictionsシリアルIDを有し、全く重複が存在しないであろう。 PostgreSQLでこのようなトリガーを作成するにはどうすればよいですか?

3
テーブルのデータスペースが生データの4倍のサイズを占めるのはなぜですか?
490 M行と55 GBの表スペースがある表があるため、1行あたり約167バイトです。テーブルには3つの列があります:a VARCHAR(100)、a DATETIME2(0)、およびa SMALLINT。VARCHARフィールド内のテキストの平均の長さは約21.5なので、生データは行ごとに約32バイトである必要があります。22+ 2はVARCHAR、6はDATETIME2、および2は16ビット整数です。 上記のスペースはデータのみであり、インデックスではないことに注意してください。[プロパティ]で報告される値を使用しています| ストレージ| 全般| データスペース。 もちろん、ある程度のオーバーヘッドが必要ですが、特に大きなテーブルの場合、1行あたり135バイトはかなり多いようです。これはなぜでしょうか?他の誰かが同様の乗数を見ましたか?必要な追加スペースの量に影響する要因は何ですか? 比較のために、2つのINTフィールドと1 M行のテーブルを作成してみました。必要なデータ領域は16.4 MBでした。8バイトの生データと比較して、行あたり17バイトです。INTとVARCHAR(100)実際のテーブルと同じテキストが入力された別のテストテーブルは、行ごとに39バイト(44 K行)を使用します。 したがって、実動テーブルにはかなり多くのオーバーヘッドがあります。これは大きいからですか?インデックスサイズはだいたいN * log(N)になると思いますが、実際のデータに必要なスペースが非線形である理由はわかりません。 ポインタを事前に感謝します! 編集: リストされているすべてのフィールドはNOT NULLです。実際のテーブルには、VARCHARフィールドとDATETIME2フィールドの順にクラスターPKがあります。2つのテストの場合、最初のテストINTは(クラスター化された)PKでした。 重要な場合:テーブルはpingの結果の記録です。フィールドは、URL、ping日付/時刻、およびミリ秒単位の待機時間です。データは常に追加され、更新されることはありませんが、データは定期的に削除され、URLごとに1時間あたり数個のレコードに削減されます。 編集: 非常に興味深い答えがここにいることを示唆している、多くの読み取りと書き込みとインデックスのために、再構築は有益ではないかもしれません。私の場合、消費されるスペースは懸念事項ですが、書き込みパフォーマンスがより重要な場合は、ゆるいインデックスを使用した方が良いかもしれません。

2
Oracleで変数を宣言して使用するにはどうすればよいですか?
私の主なスキルはSQL Serverにありますが、Oracleクエリのチューニングを行うように頼まれました。次のSQLを作成しました。 declare @startDate int select @startDate = 20110501 そして、私はこのエラーを受け取ります: declare @startDate int select @startDate = 20110501 Error at line 1 ORA-06550: line 1, column 9: PLS-00103: Encountered the symbol "@" when expecting one of the following: begin function package pragma procedure subtype type use <an identifier> <a double-quoted delimited-identifier> …

3
'n'日間のWebサーバーログをSQL Serverに保存する方法は?
より高速なレポートとパフォーマンス分析のために、WebサーバーのログをSql Serverに挿入します。これにより、ほぼリアルタイムでトラフィックパターン、問題、速度低下を確認できます。 ロードバランサーからの要求/応答イベントとデータベースへの一括挿入をリッスンするデーモンがあります。 ただし、1日あたり約1 GBのログを取得するため、約1週間程度(少なくともこの生の形式で)保持するだけで済みます。 このデータを保存する最良の方法と古いエントリを削除する最良の方法は何ですか? 毎日のデータを独自のテーブルに保存することについて説明しました。たとえば、その日のLog_2011_04_07すべてのエントリを取得し、最も古いテーブルを削除します。クエリを簡単にするために、すべての日テーブルにまたがるビューを作成できます。実行可能ですか?

2
帯域幅の問題に対処するために、MySQL 5.0レプリケーションで何ができますか?
リモートマスターの読み取り専用スレーブとして機能するMySQLサーバー5.1インスタンスで構成されたクライアントPC(Win)で実行するアプリケーションを開発しています。リモートマスターには多数のスキーマがありますが、クライアントごとに1つしか必要ないため、my.iniでreplication-do-db設定を指定して、クライアントが必要とするスキーマのみを複製します。レプリケーションは機能しますが、クライアントがデータ使用量によって課金される3Gワイヤレス経由でのみインターネットアクセスが利用できる世界の地域に入ると、データプランの制限をすぐに超えて、高価な問題が発生します。 私が理解しているように、MySQLはすべてのスキーマのすべてのトランザクションを単一のbinlogファイルに書き込みます。つまり、各クライアントはマスターのすべてのスキーマで実行されるすべてのトランザクションをダウンロードし、ダウンロードしたら、レプリケーションごとにデータベースフィルターを適用する必要があります。クライアントのmy.iniファイルのdo-db設定。 この非効率性を最小限に抑えるために、slave_compressed_protocol = 1の設定を使用しました。これにより、送信データが50%削減されるように見えますが、クライアントのデータ制限をすぐに超えて3Gの請求額が発生します。 私がこれに直面しているのは自分だけだとは想像できないので、x = yを設定することでこれを達成する方法についてたくさんの答えが得られると確信しています。ただし、このような設定のドキュメントも、推奨されるアプローチも見つかりません。 これまでのところ、可能な解決策に対する私の考えは、フィードバックまたは代替ルートを提供してください: 各スキーマに「プロキシ」スレーブを設定します(異なるボックス、または異なるMySQLインスタンス/ポートを持つ同じボックスに) クライアントが複製したい1つのデータベースのみをreplicate-do-dbにプロキシスレーブを設定します。 クライアントのMySQLインスタンスを適切なプロキシスレーブのスレーブとして構成します。 これがなければならないだけで自分のスキーマのビンログデータを引っ張って、クライアントにつながります。欠点(私が知る限り)は、セットアップの複雑さを劇的に増加させ、おそらくより脆弱にすることです。 考え?このアプローチは機能しますか? RedHatでMySQL 5.0サーバーを実行していることに注意してください。ただし、ソリューションが生成される場合は5.5にアップグレードできます。

4
Oracleデータベーステーブルをcsvファイルにアンロードするにはどうすればよいですか?
Oracle 11gリリース1データベースから特定のデータを取得し、1つ以上のCSVファイルとして提供する必要があります。データは複数のテーブルやビューに存在します。これらはすべてコマンドラインを介して機能するはずです。これに対する最善のアプローチは何でしょうか?



4
数時間オフラインにならずに、66,862,521行のテーブルをMyISAMからInnoDBに変換するにはどうすればよいですか?
アプリケーションをオフラインにすることなく、巨大なMyISAMテーブルをInnoDBに変換することは可能ですか?そのテーブルに毎秒数行を挿入する必要がありますが、約2分間中断することが可能です。 明らかにALTER TABLE ... engine = innodbは機能しません。そのため、innodbエンジンを使用して新しいテーブルを作成し、その中にコンテンツをコピーする計画がありました。最後に、アプリケーションログスレッドとRENAME TABLEを一時停止します。 残念ながら、100行の小さなバッチでコピーを行っても、しばらくするとかなりの遅れが生じます。 編集:既存の行が変更されることはありません。このテーブルはロギングに使用されます。
18 mysql  innodb 

3
OracleデータベースのSIDを変更できますか?
サーバーはOracle Database 11g Enterprise Editionリリース11.1.0.7.0-64ビットです サーバー上のテストデータベースのSIDを簡単にすばやく変更する方法はありますか? データベースの削除と再作成は私にとってオプションです。しかし、私はより少ない時間を必要とするものを探しています。 クライアントtnsnames.oraで名前を割り当てるもう1つのオプションは、一元管理されないため、エラーが発生しやすくなります。 SQL-Serverにデータベースをドロップして作成する時間と比較して、新しいOracleデータベースを作成するのに必要な時間は非常に長くなります。さらにSQL-Serverでは、SQL-Serverインスタンスの名前を変更できます。[通常、SQL-Serverが実行されているサーバーの名前を変更すると、サーバーの名前も変更するまで問題が発生します。

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