データベース管理者

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

2
SQL Server 2012で空の結果セットでクエリエラーが発生するのはなぜですか?
MS SQL Server 2012で次のクエリを実行すると、2番目のクエリは失敗しますが、最初のクエリは失敗しません。また、where句なしで実行すると、両方のクエリが失敗します。両方が空の結果セットを持つ必要があるため、どちらが失敗するのか、私は途方に暮れています。どんな助け/洞察も大歓迎です。 create table #temp (id int primary key) create table #temp2 (id int) select 1/0 from #temp where id = 1 select 1/0 from #temp2 where id = 1

4
「文字列またはバイナリデータが切り捨てられる」原因となっている列を特定するにはどうすればよいですか。
リモートPgデータベースからSELECTに書き込んだコードを使用していくつかのクエリを自動的に生成し、ローカルSQL Serverデータベースに挿入しています。ただし、そのうちの1つがこのエラーを生成しています。 [Microsoft] [ODBC SQL Server Driver] [SQL Server]文字列またはバイナリデータは切り捨てられます。(SQL-22001)[状態は22001でしたが、現在は01000] [Microsoft] [ODBC SQL Server Driver] [SQL Server]ステートメントは終了しました。(SQL-01000)。\ insert.pl行106。 どの列がそのエラーを生成しており、入力の長さが不足しているかを調べるにはどうすればよいですか 総当たり攻撃をせずにこれを行う方法はありvarcharますか?

3
大きな2億2000万行のテーブル(9ギガデータ)でクエリを高速化する方法は?
問題: 互換性またはマッチングについて、メンバーがお互いに評価できるソーシャルサイトがあります。このuser_match_ratingsテーブルには、2億2000万を超える行(9ギガのデータまたはほぼ20ギガのインデックス)が含まれています。このテーブルに対するクエリは、slow.log(しきい値> 2秒)に定期的に表示され、システムで最も頻繁に記録される低速クエリです。 Query_time: 3 Lock_time: 0 Rows_sent: 3 Rows_examined: 1051 "select rating, count(*) as tally from user_match_ratings where rated_user_id = 395357 group by rating;" Query_time: 4 Lock_time: 0 Rows_sent: 3 Rows_examined: 1294 "select rating, count(*) as tally from user_match_ratings where rated_user_id = 4182969 group by rating;" Query_time: 3 Lock_time: …

3
HEAPテーブルの有効な使用シナリオは何ですか?
現在、いくつかのデータをレガシシステムにインポートしていますが、このシステムが単一のクラスター化インデックスを使用していないことがわかりました。簡単なGoogle検索でHEAPテーブルの概念を紹介しましたが、クラスター化されたテーブルよりもHEAPテーブルを優先する使用シナリオを知りたいのですが。 私が理解している限り、HEAPテーブルは監査テーブルおよび/または挿入が選択よりもはるかに頻繁に発生する場合にのみ役立ちます。維持するクラスター化インデックスがないため、ディスク領域とディスクI / Oが節約され、非常にまれな読み取りのため、追加の断片化は問題になりません。

5
更新する値をテーブルに保持しても大丈夫ですか?
私たちは、基本的にカードとその残高、支払いなどに関するデータを保持するプリペイドカードのプラットフォームを開発しています。 これまでは、アカウントエンティティのコレクションを持つカードエンティティがあり、各アカウントには、すべての預金/引き出しで更新される金額があります。 現在、チーム内で議論が行われています。誰かがこれがCoddの12の規則を破り、支払いごとに値を更新するのは面倒だと言っています。 これは本当に問題ですか? もしそうなら、どうすれば修正できますか?

3
MySQL / Amazon RDSデータベースをS3にバックアップする推奨方法は何ですか?
これには2つの目的があります。 Amazon Web Servicesで地域全体に問題が発生した場合にオフサイトのバックアップを作成します。 量産データを量産請求アカウントからベータ請求アカウントにコピーするには。 現在、Amazonはこれら2つのユースケースのいずれかをすぐにサポートしているようには見えません。 上記のmysqldumpおよびxtrabackup(フォームポストを参照)を見てきました。 私はまた、より複雑なプロセスを見ました(ここに文書化されています) ソース請求アカウント(prod)の新しいRDSサーバーは、最近のバックアップから分離されます。 手順1でRDSサーバーにアクセスできる新しいEC2インスタンスがスピンアップされます。 mysqldumpは、このデータベースのバックアップを作成するために使用されます。 バックアップはオフサイトの場所にコピーされます(S3?)。 別のアカウントや地域で、新しいRDSサーバーがスピンアップされます。 データベースダンプがインポートされます。 ヒントと提案を歓迎します。

3
コンマで区切られた複数の外部キーを使用しているのは間違っていますか?
2つのテーブルがあります:DealとDealCategories。1つの取引に多くの取引カテゴリを含めることができます。 したがって、適切な方法はDealCategories、次の構造で呼び出されるテーブルを作成することです。 DealCategoryId (PK) DealId (FK) DealCategoryId (FK) ただし、アウトソースチームはDeal次の方法でテーブルに複数のカテゴリを保存しました。 DealId (PK) DealCategory -- In here they store multiple deal ids separated by commas like this: 18,25,32. 彼らがしたことは間違っているように感じますが、なぜこれが正しくないのかを明確に説明する方法がわかりません。 これが間違っていることをどのように説明すればよいですか?それとも私が間違っているのかもしれませんが、これは受け入れられますか?

6
デバイス上のメディアファミリの形式が正しくありません。SQL Serverはこのメディアファミリを処理できません
SQLサーバーで.BAKを復元しようとしていますが、次のエラーが表示されます。 メッセージ3241、レベル16、状態7、行1デバイス 'c:\ glyn \ JA.bak'のメディアファミリの形式が正しくありません。SQL Serverはこのメディアファミリを処理できません。メッセージ3013、レベル16、状態1、行1 RESTORE DATABASEが異常終了しています。 私は2012、2008、そして2005を使用して復元しようとしましたが、何も機能しません、私は次のクエリを使用しましたTasks >> Back upが、何も機能しません、ここに私のSQLがあります: RESTORE DATABASE JA FROM DISK='c:\glyn\JA.bak' 誰か提案はありますか?bakが破損している可能性があることを読んだことがあります。このプロジェクトに取り組んでいるDVDの別の開発者から送られてきました。

3
絶対的なパフォーマンスのために、SUMは高速ですか、それともCOUNTですか?
これは、特定の条件に一致するレコードの数のカウントに関連していますinvoice amount > $100。 私は好む傾向がある COUNT(CASE WHEN invoice_amount > 100 THEN 1 END) ただし、これは有効です SUM(CASE WHEN invoice_amount > 100 THEN 1 ELSE 0 END) 次の2つの理由から、COUNTの方が望ましいと考えていました。 意図を伝えます COUNT COUNT おそらくi += 1どこかで単純な操作が行われますが、SUMはその式が単純な整数値であると期待することはできません。 特定のRDBMSの違いに関する特定の事実はありますか?

1
プラットフォームの設計:1つのデータベースまたは複数のデータベース?
私たちは、それぞれが基礎となるデータを持つ複数のサービスを組み込んだWebプラットフォームを構築しています。これらのサービスは、Service-Oriented Architectureの原則に従って独立して構築されていますが、潜在的に関連するデータに対して処理します。これらのサービスが1つの大きなデータベースを共有するか、それぞれが独自のデータベースを持つかを検討しています。(Windows 2008クラスターでSQL Server 2008 Enterpriseを使用する予定です。) すでに検討した各アプローチの利点には次のものがあります。 単一のデータベース 異なるサービスからのデータを関連付けることは、外部キーの制約によって結び付けることができます 分析抽出は、作成が簡単で実行が高速です 災害が発生した場合、プラットフォームを一貫した状態に復元する方が簡単です 複数のサービスによって参照されるデータの場合、あるサービスによってキャッシュされたデータは、すぐに別のサービスによって使用される可能性が高い 管理と監視は前もって簡単で安価です 複数のデータベース メンテナンス作業、ハードウェアの問題、セキュリティ侵害などは、必ずしもプラットフォーム全体に影響を与えるとは限りません 各データベースが個別のハードウェア上にあると仮定すると、複数のマシンをスケールアップすると、1つの大きなマシンをスケールアップするよりもパフォーマンス上のメリットが大きくなります 運用の観点から、このプラットフォームの各サービスが独自のデータベースを取得すること、またはそれらがすべて同じデータベースに配置されることは、より有利ですか?この質問の答えを伝える重要な要因は何ですか?

6
SQL Serverによる負荷分散
Windows Server上でMicrosoft SQL Serverロードバランシングを実行し、プログラムによるアクセスに対して透過的であるために今日存在するもの。これは組み込まれていますか、またはソリューションを購入する必要がありますか? WebサーバーまたはSQL Serverへの他のデータベースアクセスの観点から、これを非常に簡単にするソリューションが今日あるかどうかを確認しようとしています。
31 sql-server 

5
開発者がデータベースの変更をフォローするための「ベストプラクティス」タイプのプロセスはありますか?
DBの変更を開発環境からQA、実稼働環境に移行する良い方法は何ですか?現在、私たちは: SQLファイルの変更をスクリプト化し、TFS作業項目に添付します。 作品は査読済みです 作業のテストの準備が整うと、QAでSQLが実行されます。 作業はQAテスト済み 作業の準備が整ったら、SQLを運用データベースで実行します。 これに関する問題は、それが非常に手作業であるということです。開発者がSQLを添付することを覚えている開発者、または開発者が忘れた場合にそれをキャッチするピアレビューアーに依存します。場合によっては、問題を発見したテスターまたはQAデプロイヤーになることがあります。 2番目の問題は、2つの別々のタスクが同じデータベースオブジェクトを変更する場合、変更を手動で調整する必要が生じる場合があることです。これは単なる方法かもしれませんが、これらの問題または何かに「フラグを立てる」自動化された方法があるべきであるように見えます。 私たちのセットアップ:開発ショップには、DBの経験が豊富な開発者がたくさんいます。私たちのプロジェクトは非常にDB指向です。私たちは主に.NETおよびMS SQLショップです。現在、作業を追跡するためにMS TFS作業項目を使用しています。これは、変更セットを作業項目にリンクし、QAおよび実稼働環境に移行するときに含める必要がある変更を正確に見つけることができるため、コードの変更に便利です。現在DBプロジェクトを使用していませんが、将来的にはそれに切り替える可能性があります(おそらくそれは答えの一部です)。 私はソース管理システムに非常に慣れており、私のためにこのようなことをやっていて、SQLにも同じことをしたいと思っています。

2
15秒以上かかるI / O要求
通常、毎週の完全バックアップは約35分で完了し、毎日の差分バックアップは約5分で完了します。火曜日以来、デイリーは完了するのにほぼ4時間かかりました。偶然にも、新しいSAN /ディスク構成を取得した直後にこれが起こり始めました。 サーバーは運用環境で実行されており、全体的な問題はなく、スムーズに実行されていることに注意してください-主にバックアップパフォーマンスに現れるIOの問題を除きます。 バックアップ中にdm_exec_requestsを見ると、バックアップは常にASYNC_IO_COMPLETIONで待機しています。ああ、ディスクの競合があります! ただし、MDF(ログはローカルディスクに保存されます)もバックアップドライブにもアクティビティはありません(IOPS〜= 0-十分なメモリがあります)。ディスクキューの長さも〜= 0です。CPUは2〜3%程度動きますが、問題はありません。 SANはDell MD3220i、6x10k SASドライブで構成されるLUNです。サーバーは2つの物理パスを介してSANに接続され、それぞれがSANへの冗長接続を備えた個別のスイッチを通過します。合計4つのパスで、そのうち2つは常にアクティブです。タスクマネージャーを使用して両方の接続がアクティブであることを確認できます。負荷を完全に均等に分割します。両方の接続が1G全二重を実行しています。 以前はジャンボフレームを使用していましたが、ここでは問題を除外するために無効にしました-変更はありません。他のLUNに接続されている別のサーバー(同じOS + config、2008 R2)があり、問題はありません。ただし、SQL Serverを実行するのではなく、その上でCIFSを共有するだけです。ただし、そのLUNの優先パスの1つは、問題のあるLUNと同じSANコントローラー上にあるため、それも除外しました。 いくつかのSQLIOテスト(10Gテストファイル)を実行すると、問題があるにもかかわらずIOが適切であることが示されているようです。 sqlio -kR -t8 -o8 -s30 -frandom -b8 -BN -LS -Fparam.txt IOs/sec: 3582.20 MBs/sec: 27.98 Min_Latency(ms): 0 Avg_Latency(ms): 3 Max_Latency(ms): 98 histogram: ms: 0 1 2 3 4 5 6 7 8 9 10 11 …


5
データが変更されないUPDATEパフォーマンス
UPDATE実際にデータを変更しないステートメントがある場合(データは既に更新された状態にあるため)。WHERE更新を防ぐために節にチェックを入れることでパフォーマンス上の利点はありますか? たとえば、次のUPDATE 1とUPDATE 2の実行速度に違いがあります。 CREATE TABLE MyTable (ID int PRIMARY KEY, Value int); INSERT INTO MyTable (ID, Value) VALUES (1, 1), (2, 2), (3, 3); -- UPDATE 1 UPDATE MyTable SET Value = 2 WHERE ID = 2 AND Value <> 2; SELECT @@ROWCOUNT; -- UPDATE 2 UPDATE MyTable SET …

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