データベース管理者

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

2
SQL Server EXECUTE ASトラブル
ストアドプロシージャを使用しようとしているときに何かが見つかりませんEXECUTE AS。ストアドプロシージャは、データを読み取りsource_db、集計し、結果をに格納しtarget_dbます。 sp自体はにありtarget_dbます。私は専用のログインを持っているし、両方のユーザーにマッピングsource_dbしてtarget_db、SPの所有者のために(そのユーザーが存在するapp_agent中source_dbやでtarget_dbログイン用app_agent)。 としてログインしてapp_agent実行する場合 EXEC target_db.app_agent_schema.import_data すべてが正常に動作します。しかし、私が変更した場合 ALTER PROCEDURE app_agent_schema.import_data WITH EXECUTE AS OWNER` (or `AS SELF`) 実行してみてください サーバープリンシパル "app_agent"は、現在のセキュリティコンテキストではデータベース "source_db"にアクセスできません。 SQL Server 2008を使用しています。 誰かが私のエラーを指摘できますか? ありがとう 更新 いくつかの研究を行った後、私はそれを発見しましたALTER DATABASE target_db SET TRUSTWORTHY ON、それが問題解決するが、それは私にとって正しい解決策ではないようです...

1
レプリケーション環境でのビンログの削除
レプリケーション環境でのバイナリログの削除について質問があります。 1つのマスターと2つのスレーブがある環境があります(mysql 5.5を実行しています)。場合によっては、処理時間が長いときにスペースの問題が発生し、binログディレクトリがいっぱいになることがあります。ログは3日ごとに期限切れになります。私は、すべてのボックス(マスターと両方のスレーブ)でログを3日間保持する必要があるのか​​疑問に思っていました。たとえば、マスターでは3日間、スレーブでは1日間ログを保持するのは理にかなっていますか?それを行う最善の方法は何ですか? ありがとうございました!


4
インデックスの再構築、DBのサイズが10倍に
約15ギガのSQL Serverデータベース(2008 R2 SP1)があります。メンテナンスがしばらくの間実行されていなかったことが判明したため、すべてのインデックスを再構築するメンテナンスプランを作成しましたが、それらは非常に断片化されていました。 ジョブは終了し、断片化はなくなりましたが、データベースは120ギガ以上になりました!すべての再構築を行うために余分なスペースを使用していたことを理解していますが、ジョブが完了すると、そのスペースはすべて空きスペースになると思いますが、空きスペースは3ギグとしてしか表示されないため、117ギグが使用されていますインデックス再構築ジョブが終了しても。 私は非常に混乱しており、いくつかのガイダンスを使用することができます。データベースを適切なサイズに戻す必要がありますが、このためのディスク容量がありません。 前もって感謝します! 投稿された両方のクエリの結果は次のとおりです。 log_reuse_wait_desc NOTHING name TotalSpaceInMB UsedSpaceInMB FreeSpaceInMB LIVE_Data 152 123 28 LIVE_Log 18939 89 18849 LIVE_1_Data 114977 111289 3688 3番目のファイルは.ndfファイルです。これは、未使用スペースに3688だけを表示しますが、約15ギガのデータに111289を使用しています。

6
SQL Serverのすべてのデータベースのバックアップを取る
Microsoft SQL Server 2005 DBサーバーがあります。DBサーバーには、約250のユーザーデータベースがあります。これらすべてのデータベースのバックアップを取る必要があります。バックアップを手動で取得すると時間がかかるため、250個すべてのデータベースのバックアップを自動的に取得するバッチスクリプトまたはDBスクリプトを探しています。誰でもこれを手伝ってくれますか?

2
UPDATE後にUPDATEをトリガーしますか?
更新の時間を次のように記録するトリガーを作成します。 CREATE TRIGGER col_update AFTER UPDATE ON col FOR EACH ROW BEGIN UPDATE col SET updated=NOW() WHERE id=NEW.id; // or OLD.id END 問題は、このトリガーがupdated列を更新しようとすると、トリガーを実行する別の更新イベントでもあることです。これは無限ループを作成しますが、機能しません。 更新時間を対応する列に保存するにはどうすればよいですか? テーブルには多くの列があるため、トリガーを使用したいと思います。更新時間を手動で設定しようとすると、多くのクエリを変更する必要があります。

4
データをアーカイブするためのテーブルパーティション
シナリオ: 2つのデータベース:DB_AとDB_Archive、tableAと呼ばれる非常に大きなテーブル1つ。 過去2か月のレコードに対してtableAがDB_Aで頻繁にクエリされるため、60日を超えるレコードは毎日DB_Aから削除され、主にDB_Archiveに移動されて「分離」されます。 このプロセスは時間がかかり、多くのリソースを消費するため、このプロセスを削除します。日付列のパーティション関数を使用してDB_Aにテーブルパーティションを実装し、1つのパーティションに2か月未満のすべてのレコードと別のパーティションに2か月以上のすべてのレコードを格納することを考えています。私の質問: このシナリオは、2つの異なるデータベースがある場合のように動作しますか?tableAにレコードを照会する> getdate()-30、アーカイブパーティションを読み取りますか? インデックスもパーティション化する必要があると思いましたか? 明日パーティション関数が「変更」されるという事実にどう対処しますか、つまり、今日関数を作成した場合(7月2日、その範囲は5月2日ですが、明日は5月3日です)。動的パーティション関数を作成できますか?

3
SSMSを使用して専用管理者接続(DAC)を確立することは可能ですか?
SSMSを使用してDACに接続することはできますか?正しく理解できれば、サーバー名の前に「admin:」プレフィックスを使用することで可能になりますが、次のメッセージが表示されます。 専用の管理者接続は、設計により複数の接続を確立するため、SSMSを介してサポートされません。(Microsoft.SqlServer.Management.SqlStudio.Explorer)

3
クエリ中にディスクから何が取得されますか?
かなり簡単な質問で、おそらくどこかで答えられましたが、Googleの正しい検索質問を作成できないようです... 特定のテーブルの列の数は、そのテーブルのサブセットでクエリを実行するとき、クエリのパフォーマンスに影響しますか? たとえば、テーブルFooに20個の列があり、クエリでそれらの列のうち5個しか選択されていない場合、20個(たとえば10個)の列があるとクエリのパフォーマンスに影響しますか?簡単にするために、WHERE句のすべてがこれらの5つの列に含まれていると仮定します。 オペレーティングシステムのディスクキャッシュに加えて、Postgresのバッファキャッシュの使用が心配です。Postgresの物理ストレージ設計に対する理解が非常に失われています。テーブルは複数のページに保存されます(デフォルトではページごとに8kのサイズに設定されています)が、そこからタプルがどのように配置されているのかよくわかりません。PGは、これら5つの列を構成するデータのみをディスクからフェッチするのに十分スマートですか?


2
MySQLがディスク上に非常に多くの一時テーブルを作成しているのはなぜですか?
構成の間違いにより、mysql..mysqlチューナーショーで一時テーブルが多くなりすぎる可能性があります Current max_heap_table_size = 200 M Current tmp_table_size = 200 M Of 17158 temp tables, 30% were created on disk table_open_cache = 125 tables table_definition_cache = 256 tables You have a total of 97 tables You have 125 open tables. Current table_cache hit rate is 3% 以前の一時テーブルは「23725個の一時テーブルのうち38%がディスク上に作成されたもの」でしたが、max_heapとtmp_tableを16mから200mに変更し、30%に下げました。 構成: engine myisam …
13 mysql  innodb  myisam  memory 

1
SQL ServerによるRAMの過剰使用を制御する方法は?
私が使用しているデータベースサーバーは、6つの異なるSQL Serverインスタンスを実行しています。48 GBのRAMがあります。そしてそのうちの1つは10 GBを超えるRAMを消費しており、現在の合計消費量は20 GBです。RAMの消費量は継続的に増加しています。数日前に40 GBを超えるRAMを使用し、サーバーの応答が非常に遅くなりました。アプリケーションは、データを保存するときにクラッシュする問題を示しています。 そこで、SQL Serverサービスを再起動しました。 サービスが再起動されるとすぐに、使用量は4 GBになりましたが、現在は増加しています。そして、4日か5日で最大40 GBになり、サーバーが遅くなるのではないかと心配しています。 サービスの再起動は、私が推測する良い選択肢ではありません。 また、さまざまなソースから、SQL Serverの最大メモリ使用量を設定できることもわかりました。これが役立つかどうかはよくわかりません。サーバーが運用データベースを使用しているため、これをテストすることはできません。SQLServerの設定を変更しているときにサービスが停止するとリスクが発生します。 誰でもこの問題を解決できますか?
13 sql-server 

2
インデックスを定義するときに列の特定の順序に利点がありますか
たとえば、2つのインデックスがある場合: CREATE INDEX IDX_1 ON MY_TABLE_1 (ITEM, DATE, LOCATION) COMPUTE STATISTICS; CREATE INDEX IDX_2 ON MY_TABLE_1 (DATE, LOCATION, ITEM) COMPUTE STATISTICS; これはIDX_2冗長になりますか?そうでない場合、列を宣言する順序を決定するにはどうすればよいですか? 通常のクエリに合わせてインデックスを調整する必要がありますか?
13 oracle  index 

2
InnoDBテーブルから断片化をどのように削除しますか?
複数のテーブルを持つデータベースがあります。 レコードの数が20Kまたは50Kを超えていると言うテーブルからいくつかのレコードを削除したい。 すべてのテーブルはInnoDBです。そして、file_per_tableあるオフ。 いくつかのテーブルからレコードを削除すると、テーブルに断片化が生じます。 断片化を削除する方法はありますか? 4月17日に更新 mysql> select TABLE_NAME, TABLE_SCHEMA, Data_free from information_schema.TABLES where TABLE_SCHEMA NOT IN ('information_schema', 'mysql') and Data_Free >0; +-----------------+--------------+-----------+ | TABLE_NAME | TABLE_SCHEMA | Data_free | +-----------------+--------------+-----------+ | City | world_innodb | 5242880 | | City_Copy | world_innodb | 5242880 | | Country | world_innodb | …

4
主キーとしてのMySQL intとvarchar(InnoDB Storage Engine?
私はWebアプリケーション(プロジェクト管理システム)を構築していますが、パフォーマンスに関してはこれについて疑問に思っていました。 課題テーブルがあり、その中には他のさまざまなテーブルにリンクする12の外部キーがあります。そのうち8つは、他のテーブルからタイトルフィールドを取得するために参加する必要があります。これは、Webアプリケーションでレコードが意味をなすようにするためです。これらの結合ごとに1つのフィールド。 今、永続的な理由で自動増分主キーを使用するように言われました(シャーディングがGUIDを使用する必要がある場合を除きます)が、varchar(最大長32)のパフォーマンスを使用するのはどれほど悪いですか?つまり、これらのテーブルのほとんどは、おそらく多くのレコードに含まれないでしょう(それらのほとんどは20未満でなければなりません)。また、タイトルを主キーとして使用すると、95%の時間を結合する必要がないため、SQLの95%でパフォーマンスヒットさえ発生します(私は思う)。私が考えることができる唯一の欠点は、私はより高いディスクスペース使用量を持っているということです(しかし、1日は本当に大したことです)。 列挙の代わりにこのようなものの多くにルックアップテーブルを使用している理由は、これらの値のすべてがアプリケーション自体を介してエンドユーザーによって構成可能である必要があるためです。 多くのレコードを持つことを除いて、テーブルの主キーとしてvarcharを使用することの欠点は何ですか? 更新-いくつかのテスト それで、私はこのものでいくつかの基本的なテストをすることにしました。私は100000レコードを所有しており、これらは基本クエリです。 ベースVARCHAR FKクエリ SELECT i.id, i.key, i.title, i.reporterUserUsername, i.assignedUserUsername, i.projectTitle, i.ProjectComponentTitle, i.affectedProjectVersionTitle, i.originalFixedProjectVersionTitle, i.fixedProjectVersionTitle, i.durationEstimate, i.storyPoints, i.dueDate, i.issueSecurityLevelId, i.creatorUserUsername, i.createdTimestamp, i.updatedTimestamp, i.issueTypeId, i.issueStatusId FROM ProjectManagement.Issues i ベースINT FKクエリ SELECT i.id, i.key, i.title, ru.username as reporterUserUsername, au.username as assignedUserUsername, p.title as projectTitle, pc.title as ProjectComponentTitle, …

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