データベース管理者

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

1
NOLOCKで変数割り当てを使用したスキャンが遅くなるのはなぜですか?
現在の環境でNOLOCKと戦っています。私が聞いた1つの議論は、ロックのオーバーヘッドがクエリの速度を低下させるというものです。そこで、このオーバーヘッドがどれだけあるかを確認するためのテストを考案しました。 NOLOCKが実際にスキャン速度を低下させることを発見しました。 最初は嬉しかったのですが、今は混乱しています。私のテストはどういうわけか無効ですか?NOLOCKは実際にはわずかに高速なスキャンを許可すべきではありませんか?ここで何が起こっているのですか? これが私のスクリプトです: USE TestDB GO --Create a five-million row table DROP TABLE IF EXISTS dbo.JustAnotherTable GO CREATE TABLE dbo.JustAnotherTable ( ID INT IDENTITY PRIMARY KEY, notID CHAR(5) NOT NULL ) INSERT dbo.JustAnotherTable SELECT TOP 5000000 'datas' FROM sys.all_objects a1 CROSS JOIN sys.all_objects a2 CROSS JOIN sys.all_objects a3 /********************************************/ …

3
ALTER TABLE権限の付与はどの程度危険ですか?
次のシナリオを想像してみてください CREATE DATABASE test GO USE test; CREATE TABLE dbo.Customer ( CustomerId INT, Email VARCHAR(100), SensitiveData VARCHAR(20) ); INSERT INTO dbo.Customer VALUES (1,'abc@foo.com','12346789'); ある時点で、testデータベースでいくつかのアクティビティを実行するETLプロセスが作成されます。 CREATE USER etlUser WITHOUT LOGIN; /*For demo purposes*/ CREATE TABLE dbo.StagingTable ( StagingTableId INT, SomeData VARCHAR(100), ) GRANT UPDATE,INSERT,DELETE,SELECT,ALTER ON dbo.StagingTable TO etlUser; DENY SELECT ON …

2
SQL Serverデータベースはいつクエリを受け入れる準備ができていますか?
SQL Serverエラーログファイルで、次の行を見つけました。 2018-02-22 14:10:58.95 spid17s Starting up database 'msdb'. 2018-02-22 14:10:58.95 spid16s Starting up database 'ReportServer'. 2018-02-22 14:10:58.95 spid18s Starting up database 'ReportServerTempDB'. 2018-02-22 14:10:58.95 spid19s Starting up database 'XYZ'. この時間より前にデータベースXYZのステータスを確認するとONLINE、次のステートメントが使用されています。 SELECT state_desc FROM sys.databases WHERE name='XYZ' ...しかし、C#アプリケーションを使用してこのデータベースに接続しようとすると、データベースに接続できません。 エラーは: ユーザー「asd」のログインに失敗しました。 理由:明示的に指定されたデータベースを開くことができませんでした。 3つの異なるユーザー(Windowsユーザー、sa、アプリケーションに定義されたSQL Serverユーザー)を試しました。OSの起動時にアプリケーションを実行すると問題が発生しますが、起動後に手動で起動してもエラーは発生しないため、SQL Serverの設定とファイアウォールの設定はすべて正しいと思います。 この前に、サービスステータスが実行されていることも確認しました。 データベースが実際にオンラインでクエリの準備ができていることを確認するために、他に何をチェックする必要がありますか? 時間を遅らせるのではなく、データベースにクエリを実行しても問題ないことを示すキーを探しています(明確な理由に基づいていなくても)。 エラーログをスキャンして "Starting up …

5
変数としてのCaseステートメントで100を超えるエントリを持つ方法
単純なクエリの4か所で同じステートメントを使用している> 100の選択肢を含むcaseステートメントを記述しました。 同じクエリを2回実行し、それらを結合したものもカウントしているため、group byにもcaseステートメントが含まれています。 これは、同じ会社の異なるレコードの綴りが異なるいくつかの会社名のラベルを変更するためです。 変数をVarChar(MAX)として宣言しようとしました declare @CaseForAccountConsolidation varchar(max) SET @CaseForAccountConsolidation = 'CASE WHEN ac.accountName like ''AIR NEW Z%'' THEN ''AIR NEW ZEALAND'' WHEN ac.accountName LIKE ''AIR BP%'' THEN ''AIR BP'' WHEN ac.accountName LIKE ''ADDICTION ADVICE%'' THEN ''ADDICTION ADVICE'' WHEN ac.accountName LIKE ''AIA%'' THEN ''AIA'' ... selectステートメントで使用すると、クエリはcaseステートメントをテキストとして返し、評価しませんでした。 また、グループで使用することもできませんでした-次のエラーメッセージが表示されました。 Each GROUP …

2
SELECTとWHERE句で同じ関数
初心者向けの質問: f(x, y)データベーステーブルの2つの列xとyに高価な関数があります。 関数の結果を列として与え、それに制約を課すようなクエリを実行したいのですが、 SELECT *, f(x, y) AS func FROM table_name WHERE func < 10; しかしこれはうまくいかないので、私は次のようなものを書かなければなりません SELECT *, f(x, y) AS func FROM table_name WHERE f(x, y) < 10; これは高価な関数を2回実行しますか?これを行う最良の方法は何ですか?

1
SQL Serverのdynamic-sqlで識別子を引用する関数は何ですか?
動的SQL生成のために識別子を安全に引用するSQL Serverの方法は何ですか。 MySQLには quote_identifier PostgreSQLには quote_ident 動的に生成されたステートメントに動的に生成された列名を指定すると、列自体がSQLインジェクション攻撃ではないことをどのように確認できますか? SQL文があるとします。 SELECT [$col] FROM table; これは本質的に同じです 'SELECT [' + $col + '] FROM table;' インジェクション攻撃を阻止するもの $col = "name] FROM sys.objects; \r\n DROP TABLE my.accounts; \r\n\ --"; その結果 SELECT [name] FROM sys.objects; DROP TABLE my.accounts; -- ] FROM table;

2
アンインストールする予定がない場合、セットアップブートストラップフォルダー内のログおよび更新キャッシュフォルダーを削除できますか?
SQL Serverのいくつかのバージョンをテストに使用し、ラップトップにインストールしています(2012、2014、2016、2017)。先日、更新(SP、CU)間で以前のバージョンのファイルを含むフォルダーがあることに気付きました。すべてのバージョンで、実際にはかなりのスペースが使用されています。 (C:\ Program Files(x86)\ Microsoft SQL Server \にあります) 110\Setup Bootstrap\Log - 91.8 MB (818 files) 110\Setup Bootstrap\Update Cache - 608 MB (2,382 files) (以下のフォルダはすべてC:\ Program Files \ Microsoft SQL Server \にあります) 110\Setup Bootstrap\Log - 1.18 GB (3,715 files) 110\Setup Bootstrap\Update Cache - 9.58 GB (14,766 files) 120\Setup Bootstrap\Log - …

1
bcpコマンド「 」付近の構文が正しくありません。キャラクターは実際には「ä」
私が持っている MSSQLサーバとMSSQL・ツールのUbuntu(Linux)の上に設置します。次のコマンドラインを使用してbcpコマンドでデータをエクスポートしようとすると、 bcp DBname.dbo.Täble_Name out Täble_Name -c -k -S127.0.0.1 -Usa -PpassWord -r ~ 私はこのエラーを受け取ります: SQLState = 37000、NativeError = 102 エラー= [Microsoft] [ODBC Driver 13 for SQL Server] [SQL Server]「 」付近の構文が正しくありません。 �ですä。 私は囲む場合はTäble_Name角括弧で: bcp DBname.dbo.[Täble_Name] out Täble_Name -c -k -S127.0.0.1 -Usa -PpassWord -r ~ オブジェクト名でこのエラーが発生します: SQLState = S0002、NativeError = 208 エラー= …

2
Linux上のSQL Serverが初期起動時にハングし、エラーが発生せず、新しい/更新されたErrorLogファイルがない
Linux(Ubuntu 16.04)でSQL Server 2017、Release Candidate 2(RC2)を使用しています。 サーバーが起動すると、通常SQL Serverも起動します。しかし、何らかの理由で、SQL Serverが起動しなくなります。少なくともsqlcmdを使用して接続することはできません。今度は、ODBCタイムアウト(「Sqlcmd:エラー:SQL Server用Microsoft ODBCドライバー13」)エラーが毎回発生します。 Login timeout expired. TCP Provider: Error code 0x2749. A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server …

2
クラスター化インデックスの選択-PKまたはFK?
私が持っているSQL Serverの2014台をその次のようになります。 OrderId int not null IDENTITY --this is the primary key column OrderDate datetime2 not null CustomerId int not null Description nvarchar(255) null 私のチームの一部の人々は、クラスター化インデックスをオンOrderIdにすることを提案しましたが、次の理由から、CustomerId+のOrderId方が適切な選択だと思います。 ほとんどすべてのクエリはWHERE CustomerId = @param、ではなく、OrderId CustomerIdはCustomerテーブルへの外部キーなので、CustomerId結合を高速化する必要があるクラスタ化インデックスを持つ 一方でCustomerId一意ではない、追加の持つOrderIdインデックスで指定した列は、(我々が使用できる一意性を保証するUNIQUEものを2列にクラスタ化インデックスを作成するときに一意性を持っていないのオーバーヘッドを回避するために、キーワードを) データが挿入されると、CustomerIdそしてOrderId決して変更、これらの行は、最初の書き込みの後に動き回ることはないので。 データアクセスは、デフォルトですべての列を要求するORMを介して行われるため、に基づくクエリが着信CustomerIdすると、クラスター化インデックスは追加の作業なしですべての列を提供できます。 んCustomerIdとOrderId最良の選択肢のようなアプローチの音は、上記に与えられましたか?それとも、OrderIdそれ自体が一意性を保証する単一の列であるため、それ自体が優れていますか? 現在、テーブルにはにクラスター化インデックスがOrderIdあり、非クラスター化インデックスがにありますが、CustomerIdカバーしていません。そのため、ORMを使用しており、すべての列が要求されているため、それらを取得するのは追加の作業です。したがって、この投稿では、CIを改善してパフォーマンスを向上させることを検討しています。 DBでのアクティビティは、約85%が読み取り、15%が書き込みです。

1
GUIクライアントからローカルMS SQL Serverへの接続
SQLサーバーとデータベースサーバーは初めてです。最近、SQL Server Expressを使用しており、Windows上のSQL Server Management Studioを使用してデータベースにアクセスしています。Linuxマシンで同様のセットアップを実現しようとしています。 マシン上にローカルSQL Serverインスタンスを作成し、データベースをクエリするためのGUIクライアントとしてSQLectronを使用します。Manjaro Linuxを使用しているので、AURからパッケージをインストールします。 これまでのところ私がインストールされているmssql-server、mssql-toolsとsqlectron-gui。sudo /opt/mssql/bin/mssql-conf setupローカルサーバーをセットアップするために(私は信じています)コマンドを実行しました。その後、コマンドを実行すると次のようにsystemctl status mssql-server返されます。 [kev @ XPS-Manjaro〜] $ systemctl status mssql-server ●mssql-server.service-Microsoft SQL Serverデータベースエンジン ロード済み:ロード済み(/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset:disabled) アクティブ:2017年8月23日水曜日13:43:49 IST以降アクティブ(実行中)。2時間42分前 ドキュメント:https://docs.microsoft.com/en-us/sql/linux メインPID:9130(sqlservr) タスク:165 CGroup:/system.slice/mssql-server.service ├─9130/ opt / mssql / bin / sqlservr └─9144/ opt / mssql / bin / sqlservr …

3
運用SQL Serverの主要なパフォーマンスの問題、これをトラブルシューティングするにはどうすればよいですか?
この質問は、基本的にこの質問の補足質問です 。SQLServer 2016の奇妙なパフォーマンスの問題 このシステムで生産性が向上しました。前回の投稿以降、このSQL Serverには別のアプリケーションデータベースが追加されました。 これらはシステム統計です: 128 GBのRAM(SQL Serverの場合は最大110 GBのメモリ) 4コア@ 2.6 GHz 10 GBitネットワーク接続 すべてのストレージはSSDベースです プログラムファイル、ログファイル、データベースファイル、およびtempdbは、サーバーの個別のパーティションにあります。 Windowsサーバー2012 R2 VMwareバージョンHPE-ESXi-6.0.0-Update3-iso-600.9.7.0.17 VMware Toolsバージョン10.0.9、ビルド3917699 Microsoft SQL Server 2016(SP1)(KB3182545)-13.0.4001.0(X64)2016年10月28日18:17:30 Copyright(c)Microsoft Corporation Standard Edition(64-bit)on Windows Server 2012 R2 Standard 6.3(Build 9600:) (ハイパーバイザー) 現在、システムに大きなパフォーマンスの問題があります。非常に高いCPU使用率とスレッド数: アクティビティモニターの待機統計(あまり信頼性がないことはわかっています) sp_blitzfirstの結果: sp_configureの結果: サーバーの詳細設定(ドイツ語のみの不幸) MAXDOP設定は私が変更しました。 これはおそらくSQL Server自体の問題ではないことを認識しています。これはおそらく、仮想化(vmware)、ネットワーク関連(すでにテスト済み)、またはアプリケーション自体の問題です。私はそれをさらに釘付けにしたいだけです。 ASYNC_NETWORK_IOが高いと、sqlserverプロセスのスレッド数が多くなりますか?スレッドを閉じることができないため、多くのワーカーが急上昇すると思います。そうですか? 必要な追加情報を提供します。よろしくお願いします! 編集: の結果 …

1
タイムスタンプでパーティション化されたテーブルを含む結合には、パーティション制約は使用されません
次のような分割テーブル構造があります。 CREATE TABLE measurements ( sensor_id bigint, tx timestamp, measurement int ); CREATE TABLE measurements_201201( CHECK (tx >= '2012-01-01 00:00:00'::timestamp without time zone AND tx < ('2012-01-01 00:00:00'::timestamp without time zone + '1 mon'::interval)) )INHERITS (measurements); CREATE INDEX ON measurements_201201(sensor_id); CREATE INDEX ON measurements_201201(tx); CREATE INDEX ON measurements_201201(sensor_id, tx); .... …

4
単一のデータベースで列の照合順序を混在させるのが悪いと考えられるのはなぜですか?
私にこの質問をするように促す2つの理由があります。 tSQLt T-SQLテストフレームワークtSQLtは、デフォルト以外の照合を持つ列が存在する場合、それを「高重大度」の問題と見なします。テストの作成者は次のように述べています。 すべての文字列列に、データベースのデフォルトの照合と一致する照合が必要であることを示唆していません。代わりに、それが異なる場合には、それには十分な理由があるはずだと提案しています。 しかし、前述のように、失敗したテストの重大度は高いと見なされます。 Octopus Deploy Octopus Deploy Serverの構成中に、OctopusServer-instanceの初期化中に、セットアップがFATALエラーで失敗します。記事これは単純な要件ですが、理由を説明しないエラーメッセージに関連するが、それはからとタコのバージョン3.8を含め、今後の展開のための要件となることを述べています。 補足として、RedGateのCIツールパッケージであるDLM Automation Suiteは、さまざまな照合を使用したデプロイメントを問題なくサポートします。 すべての列の照合順序をデータベースのデフォルトに保つという推奨は、私にとってはガイドラインまたはベストプラクティスに似ています。一部の人がなぜこのような重大なエラーと見なしているのですか?

1
SQLServer Upgrade Advisor 2014がハングする
SQL Server 2008サーバーに対してSQL Server Upgrade Advisor 2014を実行しようとしています。 2008サーバーに接続するとすべてが正常に見え、分析するデータベースを選択できます。 しかし、起動すると、何もせずに永久に実行されます(ステップルールの分析:0/112のままです)。 何が起こって、どうすれば修正できますか? SQL Server 2008と2014はどちらもExpressバージョンであり、私のラップトップにインストールされています。残念ながら、これはアップグレードアドバイザーを実行するために私が見つけた唯一の方法です(実際のprod / devデータベースで実行するには制限が多すぎます)。 SQL 2008インスタンスには、必要に応じてSP3が適用されます。 Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) Sep 21 2011 22:45:45 Copyright (c) 1988-2008 Microsoft Corporation Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) アドバイザがフリーズすると、4つのスリープクエリが表示されます(アクティブなクエリはありません)。 SELECT name, cmptlevel FROM …

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