データベース管理者

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

1
MySQLで主キーとして複数のフィールドを設定する方法は?
フィールドを持つテーブルがあります 従業員ID ブラブラ blahblah2 ..... RecordMonth RecodrdYear そのため、各従業員には、月、年、Emp#のエントリのみが一致する必要があります。テーブルを設定するにはどうすればよいですか。 それでは、月に1回EmployeeIDを更新できるが、一致する月と年に2つのエントリを持たないようにテーブルを設定するにはどうすればよいですか?

1
SQL Serverで、クラスター化インデックスの逆方向スキャンで並列処理を使用できないのはなぜですか?
私はSQL Serverの内部について読んでいますが、すべての本やブログでは後方スキャンについてこれに言及しています。 クラスター化インデックスの逆方向スキャンでは並列処理を使用できません 何かを言った唯一の投稿は、以下のこの投稿です。投稿によると、SQL Serverチームは後方スキャンに必要な最適化を実装していません。https://www.itprotoday.com/sql-server/descending-indexes リーフレベルのページは二重にリンクされたリストを使用してリンクされているため、後方スキャンが前方スキャンと異なる理由はわかりません。明確化をお願いします。

1
アクティブな接続と残りの接続の数
一定期間の接続のピーク数に関する統計を取得したいと思います。 私はpg_stat_activityビューなどを知っていますが、select count(*) from pg_stat_activityこの方法はあまり賢くないと思います。 必要な情報を提供できる他のビューまたはテーブルはありますか?

5
SQL Serverのデフォルトポートの使用を避けることはまだベストプラクティスですか?
従来、セキュリティのベストプラクティスの一環として、SQL Serverへの接続にデフォルトポートを使用しないことが推奨されてきました。単一のデフォルトインスタンスを持つサーバーでは、デフォルトで次のポートが使用されます。 SQL Serverサービス-ポート1433(TCP) SQL Server Browserサービス-ポート1434(UDP) 専用管理接続-ポート1434(TCP) 質問: このアドバイスはまだ関係がありますか? 上記のすべてのポートを変更する必要がありますか?

4
なぜBULK INSERTは危険と見なされますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Information Security Stack Exchangeから移行されました。 2年前に移行され ました。 一般にサイバーセキュリティチーム(私が扱った複数の組織)がBULK INSERTアプリケーションやデータベースプログラマーに(TSQLなどの)権利を付与することに対して何の不満があるのか​​を理解したいと思いますか?最終的な結果は次のようなことを行うアプリケーションと変わらないため、何かを逃さない限り、「ディスクの乱用を埋める」という言い訳は信じられません。 for (long i = 0; i < LONG_MAX; ++i) executeSQL("INSERT INTO table VALUES(...)"); これINSERTは、基本的な書き込み権限を持つ人が実行できる一般的なDMLコマンドです。 アプリケーションの利点として、BULK INSERTはるかに効率的で高速であり、プログラマーはSQLの外部でファイルを解析する必要がなくなります。 編集:私はもともと情報セキュリティサイトでこの質問をしました-BULK INSERTを使用することに反対しているのはDBAではなく、「情報保証」(略してIA-サイバーセキュリティの人々)が問題を強要しているからです。この質問をあと1日か2日シチューさせますが、バルク操作が実際に制約またはトリガーをバイパスする場合、問題であることがわかります。

6
SQL Serverインジェクション-26文字でどれくらいのダメージがありますか?
SQL Serverデータベースへのインジェクション攻撃に対する回復力をテストしています。 dbのすべてのテーブル名は小文字であり、照合は大文字と小文字を区別するLatin1_General_CS_ASです。 送信できる文字列は大文字に強制され、最大26文字の長さにすることができます。したがって、テーブル名が大文字になり、照合のためにステートメントが失敗するため、DROP TABLEを送信できません。 だから-私は26文字でできる最大のダメージは何ですか? 編集 パラメーター化されたクエリなどについてはすべて知っています。送信するクエリを作成するフロントエンドを開発した人が、この場合はparamsを使用しなかったとします。 また、私は悪意のあることをしようとはしていません。これは、同じ組織内の他の誰かによって構築されたシステムです。

1
この定数スキャンと左外部結合は、単純なSELECTクエリプランのどこから来たのですか?
私はこの表を持っています: CREATE TABLE [dbo].[Accounts] ( [AccountId] UNIQUEIDENTIFIER UNIQUE NOT NULL DEFAULT NEWID(), -- WHATEVER other columns ); GO CREATE UNIQUE CLUSTERED INDEX [AccountsIndex] ON [dbo].[Accounts]([AccountId] ASC); GO このクエリ: DECLARE @result UNIQUEIDENTIFIER SELECT @result = AccountId FROM Accounts WHERE AccountId='guid-here' 単一のインデックスシークで構成されるクエリプランで実行します-予想どおり: SELECT <---- Clustered Index Seek このクエリは同じことを行います。 DECLARE @result UNIQUEIDENTIFIER SET …

6
データベースに暗黙的な順序がないことを証明する方法は?
最近、たとえば、時間順にデータを並べ替える必要がある場合に、データベーステーブル内のデータを並べ替える列を持つことの重要性を同僚に説明していました。これは、クエリを一見無限に再実行でき、常に同じ順序で同じ行セットを返すため、やや難しいことがわかりました。 これに気づいたことがありますが、実際にできることは、データベーステーブルが従来のCSVファイルまたはExcelファイルのように動作することを単純に想定するのではなく、彼らが私を信頼していると主張することだけです。 たとえば、(PostgreSQL)クエリの実行 create table mytable ( id INTEGER PRIMARY KEY, data TEXT ); INSERT INTO mytable VALUES (0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h'), (8, 'i'), (9, 'j'); 明確な概念的順序でテーブルを作成します。同じデータを最も簡単な方法で選択すると、次のようになります。 SELECT * FROM mytable; 常に次の結果が得られます。 id | data ----+------ 0 | …

7
MariaDBはtcログを初期化できません
インターネットですべてのソリューションを試しましたが、私のMariaDbサーバーは失敗し続け、私を裏切り、私の小さなDevOpsの世界を破壊し続けています。状況をスムーズにしようとする私の試みには、あらゆる種類の満足が含まれていました:パーミッションの変更、設定、ログファイルの削除、アップグレード/再インストール、内部ファイルの上下移動、他のDBMSの削除、彼女以外のすべての削除...非常に長い間抵抗します 私たちの関係におけるこのような重大な瞬間を通り抜ける道を照らしてくれることを皆さんに願っています。 Vagrant datadirを使用していますが、問題はオプションにあります-デフォルトのパスを使用する場合はすべて問題ありませんが、Vagrant共有フォルダに変更するとMariaは起動しません。すべての/ var / lib / mysqlファイルを新しいフォルダーにコピーしました。 Windowsホスト、Centosゲストがあり、構成は次のとおりです。 MariaDbバージョン: mysql Ver 15.1 Distrib 10.1.17-MariaDB, for Linux (x86_64) using readline 5.1 Vagrantfile: # -*- mode: ruby; -*- ENV['VAGRANT_DEFAULT_PROVIDER'] = 'virtualbox' Vagrant.configure("2") do |config| config.vm.box_url = "https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box" config.vm.box = "centos7" config.vm.network "private_network", ip: "10.0.1.10" config.vm.synced_folder "mysql", "/vagrant/mysql", owner: "mysql", group: …
21 mariadb  centos 

1
SET STATISTICS IO-ワークテーブル/ワークファイル
私はクエリを実行しています、それは計画を生成します: 統計IO: Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'Workfile'. Scan count 128, logical reads 5952, physical reads 576, read-ahead reads 6080, lob logical reads 0, lob physical reads 0, …

3
CPU使用率は外部NUMAアクセスのコストに影響しますか?
シナリオ 1つのNUMAノードごとに4つのソケットを持つSQL Serverがあるとします。各ソケットには4つの物理コアがあります。合計512 GBのメモリがあるため、各NUMAノードには128 GBのRAMがあります。 キーテーブルが最初のNUMAノードにロードされます。 質問 そのテーブルから多くのトラフィックを読み取っていると仮定しましょう。NUMAノードを所有するソケットのすべての物理コアのCPU使用率が100%の場合、他のソケットからの非ローカルNUMAアクセスのコストに悪影響を及ぼしますか?または、その一方で、非ローカルNUMAアクセスのコストは、そのソケットがどれほどビジーであるかに関係ありませんか? 私の質問が理にかなっていることを願っています。明確にならない場合はお知らせください。 バックグラウンド 先週、本番サーバーでデータベースの問題が発生し、処理されたビジネスの一部が他のビジネスよりも大きな影響を受けたようです。1分以上かかる論理読み取りの少ないクエリがありました。全体のCPU使用率を調べたところ、約60%でした。ソケット固有のCPUメトリックは確認しませんでした。I / Oメトリックは平均でした。

1
増分更新後に統計が消える
増分統計を利用する大規模なパーティションSQL Serverデータベースがあります。すべてのインデックスはパーティション分割されています。パーティションごとにオンラインでパーティションを再構築しようとすると、インデックスが再構築された後にすべての統計が消えます。 以下は、AdventureWorks2014データベースを使用してSQL Server 2014の問題を再現するスクリプトです。 --Example against AdventureWorks2014 Database CREATE PARTITION FUNCTION TransactionRangePF1 (DATETIME) AS RANGE RIGHT FOR VALUES ( '20130501', '20130601', '20130701', '20130801', '20130901', '20131001', '20131101', '20131201', '20140101', '20140201', '20140301' ); GO CREATE PARTITION SCHEME TransactionsPS1 AS PARTITION TransactionRangePF1 TO ( [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], …

5
この明示的なキャストがリンクサーバーでのみ問題を引き起こすのはなぜですか?
オリジンサーバーのビューを介してリンクサーバーからデータをクエリしています。ビューは、次のような標準化された列のカップルを含める必要がありCreated、ModifiedかつDeleted、この場合には、ソース・サーバー上の表は、任意の適切な情報を持っていません。したがって、列はそれぞれの型に明示的にキャストされます。ビューを更新し、列を NULL AS Modified に CAST(NULL as DateTime) as Modified ただし、この更新の実行後、ビューは次のエラーメッセージをトリガーします。 メッセージ7341、レベル16、状態2、行3列 "(ユーザー生成式).Expr1002"の現在の行値をOLE DBプロバイダー "SQLNCLI11"からリンクサーバー ""に取得できません。 この「明示的なキャスト」の変更は、通常、問題なくオリジンサーバー全体で行われましたが、問題は関連するサーバーのバージョンに関連している可能性があります。このキャストを実際に適用する必要はありませんが、よりクリーンに感じます。今、私はなぜこれが起こっているのか興味があります。 サーバーバージョン(オリジン): Microsoft SQL Server 2012-11.0.5058.0(X64)2014年5月14日18:34:29 Copyright(c)Microsoft Corporation Enterprise Edition(64-bit)on Windows NT 6.1(Build 7601:Service Pack 1)(ハイパーバイザー) サーバーバージョン(リンク): Microsoft SQL Server 2008 R2(SP1)-10.50.2500.0(X64)2011年6月17日00:54:03 Copyright(c)Microsoft Corporation Enterprise Edition(64-bit)on Windows NT 6.1(Build 7601:Service Pack 1)(ハイパーバイザー) 編集 問題の列をすべて掲載しないことでミスを犯したことに気付いたので、重要な詳細を省いたことを謝罪する必要があります。これに気づかなかったのは早く分かりません。しかし、疑問はまだ残っています。 …

1
SQL Server 2014はバッチモードで正確に何を実行できますか?
クエリで列ストアインデックスが使用されている場合、SQL Serverはバッチモードを使用できます。ドキュメントは、バッチモードで実行できるものとできないものについては薄い。バッチモード(緑色)で驚くほど多くのことが実行される、次の(動機付けの)クエリプランをご覧ください。 (これは推定プランです。実際のプランを使用して、実際の実行モードが実際にバッチであることを確認しました。) T1のビルド側のみが列ストアインデックスを使用することに注意してください。すべてのプローブ入力(T2およびT3)は行ストアです。彼らのデータはバッチモードに移行しているようです。プローブ側のみで実行されるデータストリームにはバッチモードが使用されていると常に考えていました。 列ストアインデックスに由来しない場合でも、データはバッチモードに移行できるようです。それは疑問を提起します:なぜSQL Serverは行ストアのみのクエリにもバッチモードを使用しないのですか?それらのいくつかのために有益である可能性があります。列ストアインデックスの使用は、SQL Serverでバッチモードを考慮するために必要な正式な要件ですか?列ストアインデックスを持つゼロ行のダミーテーブルを追加して、バッチモードを導入し、パフォーマンスの向上を実現できますか? SQL Server 2014の時点でバッチモードで正確に実行できるものは何ですか?

5
SQL ServerがWindowsの起動時に起動しないが、手動で起動する
SQL Serverインスタンスの(SQL Server 2008 R2 Express)サービスのスタートアップの種類=自動です。過去2、3回コンピューターを再起動しましたが、サービスは単独で開始できませんでしたが、手動でサービスを開始すると正常に開始します。 イベントビューアは、接続タイムアウトのためにサービスが開始できないことを示しています。このタイムアウトに関して2つのエントリがあります。 エントリー1 SQL Server(SQLEXPRESS)サービスの接続を待機中にタイムアウト(30000ミリ秒)に達しました。 エントリー2 次のエラーが原因で、SQL Server(SQLEXPRESS)サービスを開始できませんでした:サービスが開始要求または制御要求にタイムリーに応答しませんでした。 ERRORLOGファイルを確認しましたが、これらのイベントビューアーエントリの時間の周りにエラーは記録されていません。 この問題の原因に関するアイデアや、さらに調査する方法はありますか?

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