データベース管理者

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

5
大きなアプリケーションのために、同じデータベースの異なるスキーマのテーブルに外部キーを作成するのは悪い考えですか?
私は大きなpl / sql Webベースのアプリケーションを専用サーバーに転送する作業をしています。このアプリケーションは、プログラムコードの70パッケージを含む1つのスキーマにあります。このアプリケーションは、さまざまな時期に約15人で作成されました。また、異なるスキーマの参照テーブルに外部キーを作成することは通常の習慣でした。異なるスキーマに同じ参照テーブルを保持する必要がないため、本当に便利でデータベースを非常にクリーンに保つためです。 しかし、とにかく私のDBA(DBを使用して新しいインスタンスを作成し、Solarisゾーン内にアプリケーションをコピーした)は、今日、「異なるスキーマの外部キーは悪で、破壊する必要があります!」彼は自分の見解を説明しなかった。 大きなアプリケーションでそれを行うのは本当に悪い考えですか?

3
SQL Server 2012でのPK GUIDのインデックス作成
私の開発者は、ほとんどすべてのテーブルでGUIDをPKとして使用するようにアプリケーションを設定しており、デフォルトでSQL ServerはこれらのPKでクラスター化インデックスを設定しています。 システムは比較的新しく、最大のテーブルは100万行を超えていますが、インデックス作成を検討しており、近い将来必要に応じて迅速にスケーリングできるようにしたいと考えています。 したがって、私の最初の傾向は、クラスター化インデックスを、DateTimeのbigint表現である作成済みフィールドに移動することでした。ただし、CXを一意にできる唯一の方法は、このCXにGUID列を含めることです。ただし、最初に作成されます。 これにより、クラスタリングキーの幅が広がりすぎて、書き込みのパフォーマンスが向上しますか?読み取りも重要ですが、書き込みはおそらくこの時点で大きな懸念事項です。


2
pg_upgradeの認識されない構成パラメーター「unix_socket_directory」
このコマンドをpostgresユーザーとして使用して、Fedora 18でPostgresqlを9.2から9.3にアップグレードしようとしています。 $ pg_upgrade -b /bin -B /usr/pgsql-9.3/bin -d /var/lib/pgsql/data -D /var/lib/pgsql/9.3/data/ -j 2 -u postgres ログのエラー コマンド: "/ bin / pg_ctl" -w -l "pg_upgrade_server.log" -D "/ var / lib / pgsql / data" -o "-p 50432 -b -c listen_addresses = '' -c unix_socket_permissions = 0700 -c unix_socket_directory = '/ …

3
ネットワークを切断するとクエリが停止しますか?
最近、100,000レコードに対して更新クエリを実行しました。クエリの実行中にミスを犯し、ネットワークケーブルをすぐに抜いたことに気付きました。 更新クエリ 処理を停止して完全にロールバックしますか? 処理を完了してコミットしますか? 処理を停止し、ターゲット行の一部のみを更新したままにしますか?


1
ロギングが遅いクエリ
最適化を使用する可能性のあるクエリを識別するために、サーバーで低速クエリロギングを有効にしようとしています。単純に聞こえますが、私のファイルは書き込まれていません。エラーなどは発生しませんが、遅いクエリを記録しているようには見えません。構成を変更した後、mysqlを再起動することを覚えています。 MySQL Ver 5.1.61を使用しています。my.cnfの内容は次のとおりです。 slow-query-log=1 slow-query-log-file=/var/logs/my.slow.log long_query_time=1 ファイル/var/logs/my.slow.logには所有者としてmysqlがあります。これもデバッグのために、ログファイルのすべてに読み取り/書き込みを許可しました。 上記のlong_query_timeが1に設定されているのは、それが機能しているかどうかだけを見たいからです。私はそれを低く設定しようとしました(例えば0.3)が、まだ何も記録されていません。アプリの実行中のクエリには1秒以上かかることがわかってSELECT sleep(10);います。また、テストのためにターミナルで意図的にログクエリ()を実行しましたが、ログはまだ空です。 私はこれが機能するはずであると私が見ることができるものから、ドキュメントに目を通しました。誰が私が間違っているのかについての提案はありますか?アドバイスをいただければ幸いです。 編集:コメントで尋ねられたように、私はクエリを実行しました: `SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');` 結果: 10.0000000 /var/run/mysqld/mysqld-slow.log OFF これらはデフォルトであると考えているため、明らかに私の構成の変更は考慮されていません。変更しているmy.cnfファイルが、無効な値を入力した場合にmysqlが再起動時にエラーになるように解析されていることは確かです。ここで何が起こっているのでしょうか? 別の編集: @RolandoMySQLDBAのアドバイスを受けて、遅いクエリ設定行を[mysqld]私の設定の下に移動すると、保存されているようです。上記のvariable_valueクエリの結果は次のとおりです。 1.0000000 /var/logs/my.slow.log ON ただし、ファイルmy.slow.logが書き込まれているのを見ていません。私は、ファイルがmysqlのが所有しているとして、それはアクセス許可の問題だとは思わないし、私は、ファイル上のすべてのユーザーのすべての権限を追加しました。誰もこれが機能しない理由を考えることができますか? 編集:解決しました!スロークエリログへのパスが間違っていた、/var/log/my.slow.logの代わりに/ var / *ログインしている必要がありますS * / my.slow.logを。助けてくれてありがとう、私は割り当てを学んだ!

2
SQL Server 2012シーケンスのリセット
私は、SEQUENCEオブジェクトを活用する特定のテーブルをテストし、データを取り込むプロセスにいます。このプロセスでは、何万もの挿入行をテーブルに追加するテストを行っています(これをプログラムする方法に慣れていないため)。この特定のテーブルで見られる問題は、別の母集団テストを開始したときに、SEQUENCE希望する最初の数値(1)にリセットされないことです。 新しいテストを再実行する場合は、問題のテーブルを削除してから次を実行します。 DROP SEQUENCE foo.fee; GO DROP SCHEMA foo; GO テストを再実行する場合、次のSCHEMA&SEQUENCEコマンドを実行します。これらのコマンドは、以下の順序で実行されます。 CREATE SCHEMA foo; GO CREATE SEQUENCE foo.fee START WITH 1 INCREMENT BY 1 NO CYCLE NO CACHE; GO 次に、テーブルを作成します。 CREATE TABLE foo.sample_table_with_data (order_number bigint PRIMARY KEY NOT NULL, sample_column_one nvarchar(max) NULL, sample_column_two nvarchar(max) NULL, sample_column_three nvarchar(max) NULL) GO それが完了したら、次の挿入コマンドを50,000回実行します。 …

4
大きなクエリを複数の小さなクエリに分割する方が良いでしょうか?
必要な結果を生成するために、いくつかのテーブルをサブ選択ステートメントと一緒に結合する非常に大きなクエリを必要とする状況があります。 私の質問は、複数の小さなクエリを使用することを検討し、複数の呼び出しでDBにクエリを実行して論理演算をアプリケーション層に持ち込む必要がありますか? たとえば、次のクエリを検討してください。 SELECT * FROM `users` WHERE `user_id` IN (SELECT f2.`friend_user_id` FROM `friends` AS f1 INNER JOIN `friends` AS f2 ON f1.`friend_user_id` = f2.`user_id` WHERE f2.`is_page` = 0 AND f1.`user_id` = "%1$d" AND f2.`friend_user_id` != "%1$d" AND f2.`friend_user_id` NOT IN (SELECT `friend_user_id` FROM `friends` WHERE `user_id` = "%1$d")) AND …

4
ログインは可用性グループ間で同期していません
AlwaysOnグループには2台のサーバーがあります。 同期された各データベース内のユーザーアカウントは両方のサーバーに存在しますが、データベースインスタンスレベルのログインはいずれかのサーバーにのみ存在します。つまり、DBINSTANCE-> Security-> Loginsが1つのサーバーにありません。 したがって、フェールオーバーが発生すると、2番目のサーバー(対応するインスタンスレベルのログインがない)でログインエラーが発生します。 この問題を解決するにはどうすればよいですか?ユーザーアカウントを特別な方法で設定することになっていますか?

2
CTEをセミコロンで開始する必要があるのはなぜですか?
Aaron Bertrandが数値テーブルの代わりにCTEを使用することを提案しているStackOverflowの投稿を見ているところです。私の質問は、なぜCTEの最初の行がセミコロンで始まるのですか? ;WITH n AS (SELECT TOP (10000) n FROM (SELECT n = ROW_NUMBER() OVER (ORDER BY s1.[object_id]) FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2 ) AS x ORDER BY n ) SELECT n FROM n ORDER BY n; -- look ma, no gaps! これは、WITHステートメントが以前のSELECT何かに解析されないようにするためですか?WITHの前にセミコロンを使用することについて、SQL Server 2005 BOLには何も表示されません。
13 sql-server  t-sql  cte  syntax 

2
選択時に固定値を取得する
SELECT「money」フィールドの値を取得するクエリを実行する必要があります。このフィールドは実際にはデータベースに存在しません。固定値でこのフィールドを返すクエリが必要です。この場合、USDの値。 SELECTステートメントで定数値を返すにはどうすればよいですか?
13 mysql 

4
CREATE FILEでオペレーティングシステムエラー5が発生しました(アクセスが拒否されました。)
SQL Server Management Studioで次のスクリプトを実行しようとしています。 USE [master] GO CREATE DATABASE [test1] ON PRIMARY ( NAME = N'test1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1.mdf', SIZE = 70656KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) LOG ON ( NAME = N'test1_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1_log.ldf', SIZE = 164672KB , MAXSIZE = …

2
SQLエージェントはnext_run_date / next_run_time値をいつどのように更新しますか?
msdbデータベースのsp_add_jobscheduleプロシージャを使用して、SQLエージェントジョブに新しいスケジュールを追加するために、T-SQLのコードに取り組んでいます。新しいスケジュール(通常は特定の日時に1回だけ)を追加し、すぐにsysjobschedulesとsysschedulesの値を見ると、新しいスケジュールが追加され、SQLエージェントのjob_idに関連付けられていることがわかりますジョブ。ただし、next_run_dateおよびnext_run_timeの値には0が含まれています。私が戻ってきて、2、3分後に再びそれらを見ると、彼らはまだそれらに0を示しています。ただし、さらに5分または10分後に戻ってくると、次にスケジュールされた実行に対応する日付と時刻の値が正しく表示されるようになりました。 だから私の質問は: これらの値はどのくらいの頻度で更新されますか? これらの値を更新するプロセスは何ですか? たとえば、1分後のスケジュールを追加する場合、next_run_date / timeがまだ更新されていないため、ジョブが実行されないということですか? 新しいスケジュールを追加するために使用するコードの例: exec msdb.dbo.sp_add_jobschedule @job_id = @jobID , @name = @JobName , @enabled = 1 , @freq_type = 1 , @freq_interval = 0 , @freq_subday_type = 0 , @freq_subday_interval = 0 , @freq_relative_interval = 0 , @freq_recurrence_factor = 0 , @active_start_date = @ScheduleRunDate , …


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