データベース管理者

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

1
不等式クエリのインデックス付け方法は?
float列の値に基づいてデータを除外するクエリがあります select * from My_Table where my_Float_column != 0 and my_Float_column is not null 私がそれを助けることができるならば、私はフロートタイプにインデックスを付けたくありません。実行プランは、パフォーマンスを向上させるために、以下のようなフィルターされたインデックス(ここでは0とnull値のみをインデックス付けする)を使用するのに十分賢いでしょうか? CREATE NONCLUSTERED INDEX IX_My_Table_Float_Filtered ON My_Table (my_Float_column) WHERE my_Float_column = 0 or my_Float_column is null

1
SQLHANDLEの無限再コンパイルの可能性が検出されました
私はSQLエラーログで奇妙なエラーメッセージを見つけてきました: Bocss:1時間ごとに同じデッドロックが発生–調査が必要 また、次の例のように、他のSPIDのエラーログに多くの再コンパイルがリストされます。 2015年9月4日14:30:10、spid64、Unknown、SQLHANDLE 0x0200000059631A288882589E0C54B76404CAE1B97E08D3680000000000000000000000000000000000000000 PlanHandle 0x0600040059631A2860A62B654100000001000000000000000000000000000000000000000000000000000000開始オフセット600200000010000000000000000000000000000000000000000000000000000000開始オフセット600200000010000000000000000000000000000000000000000000000000000000開始オフセット600200000010000000000000000000000000000000000000000000000000000000開始オフセット600400000009000000 、spid150、Unknown、SQLHANDLE 0x02000000EF886F018C4E0B163812B8B20150FE8FC7E6A06A0000000000000000000000000000000000000000 PlanHandle 0x06000400EF886F01901A816E0600000001000000000000000000000000000000000000000000000000000000開始オフセット998、最後のオフセット252015終了オフセット2.9 09終了オフセット25209 09終了オフセット25209 09終了オフセット2509 0930:09、spid163、不明、可能無限の再コンパイルがSQLHANDLE 0x02000000E7C7BF0E5D70DE55759C7842860272AD474D69AB0000000000000000000000000000000000000000 PlanHandle検出された可能無限の再コンパイルは、最後の再コンパイルの理由2. 2015年9月4日14れた2652終了オフセット1064オフセット開始SQLHANDLE 0x0200000057C4C632D9052275CFF2B683B80F29501EE91D730000000000000000000000000000000000000000 PlanHandle 0x0600040057C4C63200EAC2BE3000000001000000000000000000000000000000000000000000000000000000検出されました0x06000400E7C7BF0EF0EB68A52C00000001000000000000000000000000000000000000000000000000000000開始オフセット1028終了オフセット2580。最後の再コンパイル理由は2でした。 何が原因でしょうか? キャッシュにプランがもうないようです。 この投稿のアドバイスに従って http://www.sqlservercentral.com/Forums/Topic1479420-146-1.aspx 次に、安全対策によりフルテキストカタログが無効にされたため、これには違いがなかったため、変更を完全にロールバックしました(新しいオブジェクトをドロップしたなど)。これでも違いはありませんでした。結局、SQLインスタンスの再起動がそれを止めるように見えた唯一の事柄であり、これが問題を即座に解決しました。 これも私を整理しました、しかし、私はまだ最初にこの混乱を引き起こした原因を見つける必要がありますか?

4
有効期限の異なる類似のレコードをマージするにはどうすればよいですか?
私が作業しているテーブルには、3つのコンポーネントがあります。 IDカラム(別のテーブルの主キー) 一部のデータ列 有効な日付from/ to列。 値: ID Data From To 1 a 2015-01-01 2015-01-05 1 a 2015-01-06 2015-01-10 1 b 2015-01-11 2015-01-15 1 a 2015-01-16 2015-01-20 2 c 2015-01-01 2015-01-05 2 c 2015-01-06 2015-01-10 テーブルは、一定の間隔で別のデータソースの「スナップショット」を取得し、有効期限をレコードに割り当てることによって更新されます。問題は、これらのスナップショットにより、その間隔中にまったく変更されなかった(有効期間が異なる)レコードの重複エントリが作成されることです。 連続した日付の行を探し、それらをマージして単一の有効期間を割り当てることにより、テーブルのサイズを小さくしたいと考えています。例えば: ID Data From To 1 a 2015-01-01 2015-01-10 1 b 2015-01-11 2015-01-15 1 a …

1
一括挿入後に外部キーが信頼できなくなる
2012互換モードのデータベースを備えたSQL 2014エディションサーバー(12.0.2430.0-SP1はまだありません)(2014に切り替えられるように取り組んでいます...)not trustedデータベースのように一貫してマークされている少数の外部キーオブジェクトがあります。私はそれらをドロップしてNOCHECKオプションなしで再作成しましたが、5〜10分以内に再び信頼できなくなり、CREATEスクリプトを生成すると次のようになります。 ALTER TABLE [dbo].[Points] WITH NOCHECK ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId]) REFERENCES [dbo].[Badge] ([Id]) GO 使用されている作成スクリプトは次のとおりです。 ALTER TABLE [dbo].[Points] ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId]) REFERENCES [dbo].[Badge] ([Id]) GO ALTER TABLE [dbo].[Points] CHECK CONSTRAINT [FK_BadgeId] GO レプリケーションはなく、サードパーティのツールもありません。データベース上のすべてのDDLステートメントを監視しているため、別のユーザーではありません。 私は制約を細かくチェックできます(WITH CHECK CHECKそれぞれで使用)が、その後すぐに信頼できなくなります。実行される保守ジョブのみが午前AMのOlaであり、これは1日中行われます。 更新: したがって、可能性を絞り込むためにいくつかのトレースを行った後、それBULK INSERTが原因でFKが信頼されなくなる可能性があります。このmsdnの質問は、これがキーが信頼されなくなるための有効なルートであることを示しています。これは私が聞いた最初のルートです。 だから私の質問は、BULK INSERT外部キーのis_trustedステータスを維持できる使用する代替戦略はありますか?1時間に数回実行されるアプリケーションのコンテキストで実行されています。代わりに、開発者に挿入ステートメントをバッチ処理させることもできますが、BULK INSERT必要がない場合は、最終通告を使用しないようにします。

3
セッションの設定-ユーザーIDを格納するカスタム変数
ユーザーIDをカスタムセッション変数に保存し、それをトリガープロシージャで使用(読み取り)して、ユーザーアクションを承認します。私はこのようなものを見つけました: set session "myapp.user" = '12345'; ... SELECT current_setting('myapp.user'); 動作するようです-"myapp.user"は.confファイルで宣言する必要があると思いましたが、その場でセッション変数を作成できるようです(私は.confファイルをまったく変更していません)。 このようにすることの欠点はありますか?

2
プレーンテキストのパスワードなどの機密情報をログから非表示にするにはどうすればよいですか?
Postgresのインストールにアクセスできないため、確認できません。 私はセキュリティ担当者であり、ログにプレーンテキストのパスワードが表示されています。 create user user1 with password 'PLAINTEXT PASSWORD' DBAは、パスワードをログに記録せずにパスワードを変更または作成するにはどうすればよいですか? 私が見てきた、このパスワードのMD5ハッシュを使用できる状態を、が、その後ハッシュは平文でもあります。もっと良い方法はありますか?

2
commitトランザクションの前にデータをクエリする
私の理解では、MS SQL Server Management Studioウィンドウで、「トランザクションの開始」を実行してから、データをテーブルに追加するなどの変更を行った後は、そのテーブルとそれらの変更を同じウィンドウからのみ実行できます。 「トランザクションをコミットする」。 「トランザクションのコミット」を行う前に別のソースからクエリを実行する方法はありますか? 私の現在の目標に固有で、いくつかのコンテキストを追加します。Excel Power QueryからいくつかのSQLクエリを実行します。「コミットトランザクション」の前にこれらのクエリを実行して、コミットの代わりにロールバックを実行する必要があるかどうかを分析して理解できるようにしたいと思います。

3
一括削除後にmysqlテーブルのインデックスを再作成する必要がありますか?
MySQLに、毎秒多くのINSERTとSELECTを実行するテーブルがあります。そして、1日に1回、古いデータの一括削除があります。削除後にテーブルのインデックスを再作成する必要がありますか?性能を上げたい。誰かがいくつかのヒントを提案できますか?ストレージエンジンとして「innodb」を使用する。変更する必要がありますか?同時挿入と選択の方が良いと思います。あなたの提案をお願いします。インデックスの再作成を行う必要がありますか? 前もって感謝します..

2
処理のためにレコードを「チェックアウト」するための戦略
これに名前の付いたパターンがあるのか​​、それともひどい考えなのでないのかわかりません。しかし、アクティブ/アクティブの負荷分散された環境で動作するサービスが必要です。これはアプリケーションサーバーのみです。データベースは別のサーバーに配置されます。テーブル内の各レコードのプロセスを実行する必要があるサービスがあります。このプロセスには1〜2分かかる場合があり、n分ごとに繰り返されます(構成可能、通常は15分)。 この処理を必要とする1000レコードのテーブルと、この同じデータセットに対して実行される2つのサービスで、各サービスに処理するレコードを「チェックアウト」させたいと思います。一度に1つのサービス/スレッドのみが各レコードを処理していることを確認する必要があります。 過去に「ロックテーブル」を使用していた同僚がいます。他のテーブルのレコードを論理的にロックするためにレコードがこのテーブルに書き込まれ(他のテーブルはかなり静的で、非常に時々新しいレコードが追加されます)、削除されてロックが解放されます。 新しいテーブルが常に削除を挿入するのではなく、いつロックされ、現在ロックされているかを示す列があるとよいのではないかと思います。 誰かがこの種のことについてのヒントを持っていますか?長期的な論理ロックの確立されたパターンはありますか?一度に1つのサービスのみがロックを取得するようにするためのヒントはありますか?(私の同僚はTABLOCKXを使用してテーブル全体をロックしています。)

1
PostgreSQL-複数のクエリを同時に実行すると、どのような状況で速度が向上しますか?どのような状況で減速が見られますか?
私はDBAではない人として謙虚にあなたにアプローチします。そして、私の質問は概念的な欠点と「それは地雷に依存している」に満ちていると確信しています。また、私が回答することを選択したすべての人が、私が現在提供できるよりも詳細な方法で多くのことを望んでいることもかなり確信しています。 とはいえ、私は一般的に次のシナリオに興味があります。 2つの重要なクエリがあるとします。 クエリ1の平均所要時間は2分です。 クエリ2の平均所要時間は5分です。 順次実行すると、平均して完了するまでに7分かかると思います。これは妥当ですか? ただし、2つのクエリを同時に実行するとどうなるでしょうか。同時に2つの別々の接続。 どのような条件下でスピードアップが見込めますか?(合計時間<7分) どのような状況下で減速が予想されますか?(合計時間> 7分) さて、1,000個の重要なクエリを同時に実行していると、全体的に速度が低下するという直感があります。その場合、ボトルネックはどこにあるでしょうか?プロセッサー?羊?ドライブ? 繰り返しますが、詳細を知らない限り、質問に正確に答えることはおそらく不可能であることを知っています(私は持っていません)。次の質問をするときに検討するいくつかの一般的なガイドラインを探しています: どのような状況下で、同時クエリによって全体的な速度が向上しますか? どのような状況で同時クエリが全体的な速度低下を引き起こしますか?

1
PostgreSQLのロールにテーブル/関数の削除権限を付与するにはどうすればよいですか?
drop特定のデータベースの特定のスキーマにあるすべてのテーブルと関数(ユーザーが所有するものだけでなく)に対する特権を特定のロールに付与したい。しかし、GRANT ALL PRIVILEGESそれだけでは不十分であり、スーパーユーザーにすることなしにその方法を見つけることができませんでした。スーパーユーザーは、同じサーバー上の他のデータベースに対する権限を持っています。スーパーユーザーの権限が特定のデータベースに限定されていてもかまいませんが、その方法はわかりません。 私のコード: CREATE USER _administrator PASSWORD 'pwd12345'; CREATE ROLE administrator NOLOGIN ADMIN _administrator; GRANT ALL PRIVILEGES ON DATABASE "myDB" TO administrator; GRANT ALL PRIVILEGES ON SCHEMA public TO administrator; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO administrator; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA …

3
列のnull値と非null値をカウントする
MySQLの同じ列でnullとnot nullをカウントして取得する方法は? mytable --------------------------------------------------- id | name | visited | registDate | --------------------------------------------------- 1 | george | NULL | 2014-04-01 | --------------------------------------------------- 2 | Thomas | NULL | 2014-04-15 | --------------------------------------------------- 3 | Wilfred | 1 | 2014-04-24 | --------------------------------------------------- 4 | paul | 1 | 2014-04-10 | --------------------------------------------------- 5 …
10 mysql  count  null 

3
インデックスと制約の一覧表示
継承したアプリケーションのSQL Serverデータベースを見ています。約10年間SQL Serverを調べていませんので、ご容赦ください。 私が調べているデータベーステーブルにはというbigint NOT NULL列がありますがid、制約を確認しても何も表示されず、すべてのデータベーステーブルに同じことが当てはまります。 これらのテーブルに主キーとインデックス(クラスター化または非クラスター化)がないと仮定しても正しいですか? 私は次のクエリを実行しましたが、結果は私の疑いを裏付けるように見えます。 //**returns 0** select count(*) from INFORMATION_SCHEMA.TABLE_CONSTRAINTS; //**returns no rows** select * from sys.indexes where object_id = (select object_id from sys.objects where name = 'NAME-OF-TABLE'); //**returns all tables in database** SELECT name FROM sys.tables WHERE OBJECTPROPERTY(object_id,'IsIndexed') = 0;

2
SQLエージェント-PowerShellステップ「構文エラー」
実行されていないSQLエージェントジョブステップで次のコードを設定しています。受け取ったメッセージは単純です: ステップ1の実行を開始できません(理由:line(46):構文エラー)。ステップは失敗しました。 ジョブの期間は次のとおりです。 00:00:00 このスクリプトの46行目はhere-string: ,@DriveLetter = '$($c.DriveLetter)' このスクリプトは、SQL Serverエージェントの外部で完全に実行されます。 ServerNamesテーブル: CREATE TABLE ServerTable ( ServerName varchar(50) ) ディスクスペーステーブルは次のようになります。 CREATE TABLE DiskSpace ( ID int IDENTITY(1,1), ServerName varchar(50), DriveLetter varchar(2), DiskSpaceCapacityGB decimal(12,5), DiskSpaceFreeGB decimal(12,5) ) PowerShellスクリプト: This command is to allow SQL Agent job to show failure in event PowerShell …

3
挿入トリガーからPythonスクリプトを起動する
いくつかの電子メールを送信し、クラウドシステムとやり取りするPythonの素晴らしい部分があります。正常に動作します。しかし、dbをポーリングするには、数分ごとに実行する必要があります。ビジネス目的では、Pythonスクリプトをリアルタイムで実行する必要があるため、ポーリングの遅延はありません。(これは、顧客と電話で連絡している営業担当者に提供されます。) 実際には1分のポーリングループは必要ありません。または30秒。レコードをdbに表示して、すぐに何かが起こるようにしたいと思っています。 このフライをすばやく作成するには、特定のレコードタイプがテーブルに挿入されたときにこれを起動します。 トリガーからPythonスクリプトを起動できますか? 以下のAaronのメモによれば、これはVery Bad Thing™であることがわかりますが、このテーブルはほとんど使用されません(1日に0〜12挿入)。テーブルをポーリングしても、ビジネスニーズを満たすことができません(.pyをすぐに実行する必要があります-電子メールを送信するだけではありません)。 私たちのビジネスニーズを満たす方法は、SQL Serverに.netバージョンのpythonをセットアップし、T-SQLがC#のものを呼び出す方法でpythonスクリプトを呼び出すようにすることです... しかし、私たちは方法がわかりません実際にこれを行う!(この質問に答えてください)。 ドキュメント/詳細? Stack Overflowでフォローアップの質問をしました:SQL ServerでPython CLRプロシージャを作成するにはどうすればよいですか? 質問の下の質問:あなたはPythonの断片を持っています。SQLトリガーから起動したいのですが、それは非常に悪いことです。では、SQL操作の途中でPythonコードを使用せずに同じ効果を実際に達成するにはどうすればよいでしょうか。 このニーズを解決するための非トリガー、非ポーリングのアプローチは何ですか? (同じ効果=「テーブルで挿入/更新/削除が行われ、テーブルをポーリングせずに、dbイベントの2秒以内にPythonスクリプトがトリガーされます」)

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