データベース管理者

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

4
ソースLOB列を処理するときの「行ごとの」フェッチメソッドの回避
SSISを使用して新しいSQL Serverスキーマに移行しようとしているレガシーPostgreSQLデータベースソース(ODBC)があります。次のような警告が表示されます。 テーブルにLOB列があるため、「Row by Row」フェッチメソッドが適用されます。列の内容はLOBです 実は、どの列も実際にLOBである必要はありません。TEXT型はいくつかありますが、varchar(max)内に簡単に収まります。でも見知らぬ人は、しかし、最もすでにある VARCHARが、それはLOBであるかのように扱われているvarchar型以上のもの(128)らしい(事前のプロパティでは、データ型はDT_NTEXTです)。 selectステートメントですべての文字列型を適切な長さのvarcharに明示的にキャストし、ODBCソースでDT_NTEXTとして設定されているSQLコマンドを手動で実行しようとしました。 私はDBAではないので、本当に愚かなことをしている可能性は十分にあります。バッチフェッチできるように、型が最終的にvarcharになるようにするための最良の方法を知りたいのですが。何か案は? 必要に応じて、Visual Studio 2013内でSSIS-BI 2014を使用しています。


3
各音楽アーティストがグループまたはソロパフォーマーであるシナリオのモデリング
以下で詳しく説明するように、音楽アーティストの描写を含むビジネスコンテキストのエンティティ関係図(ERD)を設計する必要があります。 シナリオの説明 アンアーティストが持っている名前を、とでなければならないのいずれかのグループ やソロパフォーマー(両方ではありません)。 A グループは、一人の以上で構成されソロパフォーマーと有するメンバーの数(数から計算されるべきであるソロ出演構成するグループ)。 A ソロパフォーマーは、かもしれ加盟多くの団体、あるいは全くのグループと1つの以上プレイしてもよい楽器を。 質問 このようなシナリオを表すERDを構築する方法は?「または」の部分と混同しています。


2
Redisがすべてのメモリとクラッシュを占有する
Redisサーバーv2.8.4は、8 GBのRAMと16 GBのスワップスペース(SSD上)を備えたUbuntu 14.04 VPSで実行されています。ただしhtop、redis一人22.4 Gで記憶を占有していることを示しています! redis-server記憶不足のために最終的にクラッシュしました。Memそして、Swpの両方が、その後、100%に当たるredis-server他のサービスと一緒に殺されます。 からdmesg: [165578.047682] Out of memory: Kill process 10155 (redis-server) score 834 or sacrifice child [165578.047896] Killed process 10155 (redis-server) total-vm:31038376kB, anon-rss:5636092kB, file-rss:0kB redis-serverOOMクラッシュまたはから再起動すると、service redis-server force-reloadメモリ使用量が100MB未満に低下します。 質問:redis-serverクラッシュするまで、メモリをどんどん占有するのはなぜですか?どうすればこれを防ぐことができますか? maxmemoryredisがmaxmemory制限に達するとデータの削除を開始するため、設定が機能しないのは本当ですか? redis-serverを再起動した後 Redisバージョン: Redis server v=2.8.4 sha=00000000:0 malloc=jemalloc-3.4.1 bits=64 build=a44a05d76f06a5d9 更新 ときhtopのメモリ使用量を報告redis-server4.4gのRAMと22.6Gスワップされることを、Redisの内のすべてのキーによって取り込まれたスペースの量はわずかである60.59636307 MBことで報告されたように、rdbtools。これは、redis-server再起動直後に使用されるRAMの量でもあります。 INFO ALLいつredis-serverメモリを大量に消費しているのか mem_fragmentation_ratio:0.19 127.0.0.1:6379> …

2
1つのクエリで異なる値を持つ複数の行を更新する
異なる値を持つ複数の行を更新する方法を理解しようとしていますが、取得できません。解決策はどこにでもありますが、私には理解するのが難しいようです。 たとえば、1つのクエリへの2つの更新: UPDATE mytable SET fruit='orange', drink='water', food='pizza' WHERE id=1; UPDATE mytable SET fruit='strawberry', drink='wine', food='fish' WHERE id=2; CASE WHEN .. THEN ... ENDの動作と使用方法がわかりません。 誰かがこれについて私を助けることができるのだろうか。
12 mysql  update 

2
インデックス付きビューが一意でないクラスター化インデックスを許可しないのはなぜですか?
インデックス付きビューを使用して、最もよく使用されるいくつかのビューのパフォーマンスを向上させることを検討してきました。 ただし、インデックス付きビューは、一意ではないクラスター化インデックスをサポートしていません。これは、データベース構造の残りの部分によって設定された優先順位に少し影響します。 たとえば、ここにいくつかのテーブルの簡略化したバージョンがあります。 -Groups- Group ID GroupName -Users- UserKey UserName FullName GroupID インデックスは、Groups.GroupID(非クラスター化)およびUsers.GroupID(クラスター化)にあります。クラスター化されたキーは、最も一般的には特定のグループの一連のユーザーが取得されるため、UsersテーブルのGroupIDにあります。当然、グループごとに複数のユーザーがいるため、このクラスター化インデックスは一意ではありません。 このため、この例のようにビューにインデックスを付けるときに、この優先順位に従う方法が少し不確かになります。これは、一意でないクラスター化インデックスを持つことができないためです。 ConsumableID ConsumableVariantID AllowThresholdOverwrite FullPath GroupID ManufacturerID Type ModelID 101 29 1 0.1.2.4. 4 3 3 2 実際には、常に一意であるこのビューの唯一の値はConsumableID列です。そのため、インデックスを配置する場所についてほとんど選択肢がありません。 通常のテーブルで許可されているのに、ビューが一意でないクラスター化インデックスを許可しないのはなぜですか?

2
auto_incrementキーはINSERTでどのように処理されますか(SELECT * FROM…)
私が持っているtable1とtable2MySQLのインチ どちらにも主auto_incrementキーがありますid。 テーブルスキーマが一致していINSERT INTO table1 (SELECT * FROM table2)て、に挿入された新しい行に関してどうなりtable1ますか?id行の値table1が同じである場合、古い値を保持して競合を生成しidますか?auto_incrementによって新しい値が生成されますか?ストレージエンジンまたはロックに依存しますか?

2
character_set_clientの値をutf8mb4に設定します
私のDBをこのガイドにutf8mb4従うように変換しようとしています。私は設定しました: [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] init-connect='SET NAMES utf8mb4' collation_server=utf8mb4_unicode_ci character_set_server=utf8mb4 skip-character-set-client-handshake しかし、の値character_set_clientとcharacter_set_results、まだはutf8mb4に変更されません。 mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; +--------------------------+--------------------+ | Variable_name | Value | +--------------------------+--------------------+ | character_set_client | utf8 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary …
12 mysql  collation  utf-8 

1
PostgreSQLでのローリングデータの保存とクエリ
大量の気象モデルデータをPostgreSQLデータベースに入れています。マシンには8つのコアと16 GBのRAMが搭載されています。PostGIS 2.1でPostgreSQL 9.3を実行しています。各テーブルには、さまざまな気象データ(気温、露点、風など)があります。各テーブルには6〜7列があります。緯度、経度、ポイントジオメトリ、標高、モデルが関連する日時、および対象となる1〜2のデータ値です。データは主に、時間と高度によって境界ボックスを照会されます。テーブルあたり約145,757,360行になります(現在より古いデータはもはや関係がなくなり、削除されます)。テーブルのサイズは、おおよそ、インデックスなしで約10 GBと推定されます。(これは、52バイトのデータと1行あたり23バイトのオーバーヘッドです)。新しいモデルデータが利用可能になると、データは定期的に更新/挿入されます。注意: だから私はこれらの2つの計画を見ています: ポイントジオメトリの追加のインデックスを使用して、(日時、標高)でインデックスを付けてクラスタ化するだけです。古い行を削除し、vacuum / analyzeを実行し、再クラスター化する通常のcronジョブを実行します。 日時でパーティション化し、ジオメトリのインデックスを持つテーブルごとに標高でクラスタ化してインデックス化します。通常のcronジョブを実行して、新しいテーブルを追加し、古いテーブルを削除します。 さらに、 したがって、テーブルを削除する方がはるかに効率的で、削除およびバキューム処理を行うことを知っています。しかし、それ以外の場合はパフォーマンスが向上しますか? パーティションは、すべてのテーブルが均等に更新されて削除されるまで適切ではない場合に適切ですか(ドキュメントでは、一部のテーブルのみを選択した場合にパーティションが最適に機能することが示されています)? データを配信する場合、選択はクラスター化インデックスよりも高速になりますか?複数のリクエストが一度に行われる場合、答えは変わりますか? ありがとうございました。必要なデータをすべて入れてほしい。知らない場合はお知らせください。追加します。

3
「データベースは移行中です」エラー
今日、既存のデータベースの上にデータベースを復元しようとしていましたが、SSMSでデータベースを右クリックしただけです->タスク->オフラインにして、データベースを復元できるようにしました。 小さなポップアップウィンドウが表示されQuery Executing.....、しばらく表示された後、エラーメッセージが表示されましたDatabase is in use cannot take it offline。そこから収集したデータベースへのアクティブな接続がいくつかあるので、次のクエリを実行しようとしました USE master GO ALTER DATABASE My_DatabaseName SET OFFLINE WITH ROLLBACK IMMEDIATE GO この時点でも、SSMSはしばらくの間Query Executing.....表示し、次のエラーをスローしました。 Msg 5061, Level 16, State 1, Line 1 ALTER DATABASE failed because a lock could not be placed on database 'My_DatabaseName'. Try again later. Msg 5069, …

1
データウェアハウジングシナリオで「統計の自動更新」を無効にする必要がありますか?
SQL Serverに200 GBのデータウェアハウスがあります。 一部のクエリの実行時間が非常に遅くなっています。たとえば、をdelete使用した単純なクエリの場合は12時間ですinner join。 実行計画でいくつかの調査を行った後、WITH FULLSCANオプションを使用して、クエリに関連する2つのテーブルの統計を更新しました。 クエリは1秒未満で実行されるようになったため、統計は最新ではなかったようです。 auto update statisticsデータベースを無効にしてUPDATE STATISTICS、データウェアハウスの読み込み後に手動で実行することを検討しています。データウェアハウスは、ソースERPシステムから毎日、夜間に段階的に読み込まれます。 auto update statisticsデータウェアハウジングシナリオでは本当に役に立たないと想定しても正しいですか?代わりに、データのロード後に統計を手動で更新する方が理にかなっていますか?

1
PowershellでSSMSから印刷されたメッセージを取得する
私たちのDBAチームは、以下を使用してバックアップを検証していませんTSQL(バックアップ後に簡単に実行でき、ほとんど時間がかからないので、理由がわかりません)。 RESTORE VERIFYONLY FROM DISK = 'D:\Backups\LOCATION' 彼らは過去に問題を抱えていたので、そこから学べると思っていても、そうではありません。約100台以上のサーバーがあり、すべてのバックアップに対してこのスクリプトを実行して、それらが有効であることを確認するため、これを行うためにPowershellスクリプトを作成しました。以下のスクリプトは正しく実行されます(エラーが発生したり、エラーが発生したりしないため)、PowerShellで印刷されたメッセージを取得する方法があり、SSMSで通常取得する方法があり、ファイル1のバックアップセットは検証として有効です。 $SqlCon = New-Object System.Data.SqlClient.SqlConnection $SqlCon.ConnectionString = "SERVER=SERV\INST;Integrated Security=true;DATABASE=master" $baks = Get-ChildItem "D:\Backups\" -Filter *.BAK foreach ($bak in $baks) { $SqlCon.Open() $cd = New-Object System.Data.SqlClient.SqlCommand $cd.Connection = $SqlCon $cd.CommandText = "RESTORE VERIFYONLY FROM DISK = @f" $cd.Parameters.Add("@f", $bak.FullName) $cd.ExecuteNonQuery() $SqlCon.Close() }

2
データマート/倉庫でのタイムゾーンの処理
私たちはデータマート/倉庫のビルディングブロックを設計し始めており、すべてのタイムゾーンをサポートできる必要があります(私たちのクライアントは世界中から来ています)。オンライン(および本)でのディスカッションを読むと、一般的な解決策は、ファクトテーブルに日付と時刻の個別のディメンションとタイムスタンプを持つことです。 しかし、私が答えるのに苦労している質問は、動的なタイムゾーンの要件を考慮すると、日付と時刻のディメンションが実際にどのように役立つかです。時間ディメンションはもう少し理にかなっていますが、日付ディメンションで苦労しています。日付ディメンションの一般的な設計アプローチには、通常、曜日名、曜日、月名などのプロパティが含まれます。私が抱えている問題は、2013年12月31日火曜日の午後11時(UTC)が水曜日であることです。 、2014年1月1日、UTC + 2以降のすべてのタイムゾーン。 したがって、すべてのクエリ(およびレポート)でこれらすべてのタイムゾーン変換を行う必要がある場合、おそらく使用しない(これらのプロパティのように)これらのプロパティを保持して保存することの意味は何ですか?一部の人々は、タイムゾーンごとにファクト行を持つことを提案しますが、それは私にはばかげているようです。毎月何百万ものレコードを保存できる必要があります。 他の人は、タイムゾーンブリッジテーブルを使用することをお勧めします。これは、ある程度の意味がありますが、クライアントアプリとレポートが日付から簡単に理解できるはずのことを達成するための追加の複雑さと結合のようにも見えます(レポートは主にWebベースになります)日付の変換、表示、およびフォーマットを支援する無数のライブラリがあります)。 私が考えることができる唯一のことは、日付と時間でグループ化することの容易さとおそらくパフォーマンスですが、日付部分でグループ化することはどれほど悪いことですか(MS SQLを使用していますが、数百万の行をクエリすることになります)、または考慮する必要があります月曜日などのほとんどのリテラルはタイムゾーンが機能するときにあまり意味がないので、ほとんどの場合、時間、日、月、年の数以下の非常に単純な日付と時刻のディメンションですか?

2
データが失われる可能性があるため、値を変換できませんでした[終了]
閉じた。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にしてください。 5年前に閉鎖されました。 まず、これが重複した質問ではなく、その問題の潜在的な重複でもないことを明確にすることから始めましょう。StackOverflowとDBA Stack Exchangeでこの問題の既存のすべてのバリアントに対するすべての答えを、運がなくても実装しようとしました。 私は過去2日間この問題に取り組んでおり(1日約7時間問題に取り組んでいます)、問題をグーグルで解決した後でも、他の誰も私の問題とまったく同じ変種を持っているようには見えません。 私は何をしようとしていますか? SSISで、CSVファイルから読み取り、そこから行をOLE DBデータベースに挿入しようとしています。そのため、以下に示すように、私はこれまでで最も簡単なセットアップを行いました。 Flat File Source -CSV行を読み取ります。 Derived Column -現在は何もしません(実験のためだけにあります)。 Data Conversion -現在は何もしません(実験のためだけにあります)。 OLE DB Destination -データベースに行を格納します。 実行しようとすると、OLE DB宛先で実行が停止し、次のエラーメッセージが表示されます。 入力「OLE DB宛先入力」(51)の入力列「金額」(187)でエラーが発生しました。返された列のステータスは、「データが失われた可能性があるため、値を変換できませんでした。」でした。 失敗した列(Amount)は現在タイプDT_STRです。それが今一番信頼しているタイプのようです。 私は何を試しましたか? Flat File Connection失敗している列で「推奨タイプ」関数を使用してみました。これにより、Single byte signed intデータ型が推奨されました。 で停止し、私のフラットファイルソース。 エラーは、データ変換が失敗したことです。列「金額」のデータ変換は、ステータス値2およびステータステキスト「データが失われる可能性があるため、値を変換できませんでした。」を返しました。 を使用しDerived Columnて列をにキャストしようとしましたDT_I4。 で停止し、私の派生列。 エラーは、データ変換が失敗したことです。列「金額」のデータ変換は、ステータス値2およびステータステキスト「データが失われる可能性があるため、値を変換できませんでした。」を返しました。 を使用しData Conversionて列の値をにキャストしようとしましたDT_I4。 私で停止しますData Conversion。 エラーは、データ変換が失敗したことです。列「金額」のデータ変換は、ステータス値2およびステータステキスト「データが失われる可能性があるため、値を変換できませんでした。」を返しました。 DT_STRソースと宛先の値の長さを変更してみました。 設定に応じて、ソースまたは宛先で停止します。 私の代わりに使用してExcelソース・コネクターを使用して接続しようとしたとすることなく、IMEX=1接続文字列に追加します。運がありません。 …

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