データベース管理者

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

3
MySQLを使用したバージョン管理システムの実装
私はこれがこことここで尋ねられたことを知っていますが、異なる考えられる実装で同じ考えを持っているので、助けが必要です。 最初は、blogstoriesこの構造のテーブルがありました。 | Column | Type | Description | |-----------|-------------|------------------------------------------------| | uid | varchar(15) | 15 characters unique generated id | | title | varchar(60) | story title | | content | longtext | story content | | author | varchar(10) | id of the user that originally wrote the …


2
同じ関数の同時呼び出し:デッドロックはどのように発生しますか?
私の関数new_customerは、Webアプリケーションによって1秒あたり数回(ただし、セッションごとに1回)呼び出されます。最初に行うことは、customerテーブルをロックすることです(「存在しない場合は挿入」、つまりの単純なバリアントupsert)。 ドキュメントの私の理解は、他の呼び出しは、new_customer以前の呼び出しがすべて終了するまで単純にキューに入れる必要があるということです: LOCK TABLEは、テーブルレベルのロックを取得し、競合するロックが解放されるのを必要に応じて待機します。 代わりにデッドロックが発生することがあるのはなぜですか? 定義: create function new_customer(secret bytea) returns integer language sql security definer set search_path = postgres,pg_temp as $$ lock customer in exclusive mode; -- with w as ( insert into customer(customer_secret,customer_read_secret) select secret,decode(md5(encode(secret, 'hex')),'hex') where not exists(select * from customer where customer_secret=secret) returning customer_id ) insert …

2
シークできない永続化計算列のインデックス
という名前のテーブルがありAddress、そのテーブルには、という永続的な計算列がありHashkeyます。列は確定的ですが、正確ではありません。シークできない一意のインデックスがあります。このクエリを実行すると、主キーが返されます。 SELECT @ADDRESSID= ISNULL(AddressId,0) FROM dbo.[Address] WHERE HashKey = @HashKey 私はこの計画を取得します: インデックスを強制すると、さらに悪い計画が得られます。 インデックスとシークの両方を強制しようとすると、エラーが発生します。 このクエリで定義されたヒントのため、クエリプロセッサはクエリプランを作成できませんでした。ヒントを指定せずに、使用せずにクエリを再送信しますSET FORCEPLAN これは、正確ではないという理由だけですか?持続するかどうかは関係ないと思いましたか? これを非計算列にすることなく、このインデックスをシーク可能にする方法はありますか? これに関する情報へのリンクはありますか? 実際のテーブル作成を投稿することはできませんが、同じ問題があるテストテーブルを次に示します。 drop TABLE [dbo].[Test] CREATE TABLE [dbo].[Test] ( [test] [VARCHAR](100) NULL, [TestGeocode] [geography] NULL, [Hashkey] AS CAST( ( hashbytes ('SHA', ( RIGHT(REPLICATE(' ', (100)) + isnull([test], ''), ( 100 )) ) + …

4
キーを明示的にする必要があるのはなぜですか?
私はデータベースの主題について非常に新しいので、これは無知に聞こえるかもしれませんが、テーブル内でキーを明示的にする必要がある理由を知りたいです。これは主に、指定された列の値が(できれば)各行内で一意であることが保証されていることをユーザーに伝えるためですか?言及されていない場合でも、一意性は存在する必要があります。

4
SQL Serverデッドロックレポートのキーを値に変換するにはどうすればよいですか?
waitresource = "KEY:9:72057632651542528(543066506c7c)"に関連する競合があったことを示すデッドロックレポートがあり、これを見ることができます。 <keylock hobtid="72057632651542528" dbid="9" objectname="MyDatabase.MySchema.MyTable" indexname="MyPrimaryKeyIndex" id="locka8c6f4100" mode="X" associatedObjectId="72057632651542528"> <resource-list>内。キーの実際の値(id = 12345など)を検索できるようにしたい。その情報を取得するには、どのSQLステートメントを使用する必要がありますか?

1
sp_cursoropenと並列処理
私は頭を悩ませることができないように見えるクエリでパフォーマンスの問題に直面しています。 カーソル定義からクエリを引き出しました。 このクエリの実行には数秒かかります SELECT A.JOBTYPE FROM PRODROUTEJOB A WHERE ((A.DATAAREAID=N'IW') AND ((A.CALCTIMEHOURS<>0) AND (A.JOBTYPE<>3))) AND EXISTS (SELECT 'X' FROM PRODROUTE B WHERE ((B.DATAAREAID=N'IW') AND (((((B.PRODID=A.PRODID) AND ((B.PROPERTYID=N'PR1526157') OR (B.PRODID=N'PR1526157'))) AND (B.OPRNUM=A.OPRNUM)) AND (B.OPRPRIORITY=A.OPRPRIORITY)) AND (B.OPRID=N'GRIJZEN'))) AND NOT EXISTS (SELECT 'X' FROM ADUSHOPFLOORROUTE C WHERE ((C.DATAAREAID=N'IW') AND ((((((C.WRKCTRID=A.WRKCTRID) AND (C.PRODID=B.PRODID)) AND …

1
「LIMIT 0、1」と「LIMIT 1」に違いはありますか?
私は最近、これらの表記法が異なるサンプルコードに出くわしました。 SELECT * FROM table LIMIT 0, 1 SELECT * FROM table LIMIT 1 私が間違っていない場合、最初の引数はオフセットと見なされる必要があります。これら2つのクエリの目的は、選択を最初の行までに制限することです table オフセットを除外するときにマイナスの影響はありますか?そもそもそれを除外する方法はありますか?または、クエリを誤解しましたか?
15 mysql 


2
アトミックトランザクションで一意の違反を回避する
PostgreSQLでアトミックトランザクションを作成することはできますか? これらの行を持つテーブルカテゴリがあると考えてください。 id|name --|--------- 1 |'tablets' 2 |'phones' また、列名には一意の制約があります。 私が試した場合: BEGIN; update "category" set name = 'phones' where id = 1; update "category" set name = 'tablets' where id = 2; COMMIT; 私は得ています: ERROR: duplicate key value violates unique constraint "category_name_key" DETAIL: Key (name)=(tablets) already exists.

1
部分的に更新された行を読みますか?
SSMSの2つの個別のセッションで実行される2つのクエリがあるとします。 最初のセッション: UPDATE Person SET Name='Jonny', Surname='Cage' WHERE Id=42 2番目のセッション: SELECT Name, Surname FROM Person WITH(NOLOCK) WHERE Id > 30 SELECTステートメントが半分更新された行、たとえばName = 'Jonny'andを含む行を読み取ることは可能Surname = 'Goody'ですか? クエリは、別々のセッションでほぼ同時に実行されます。

2
データベースの暗号化証明書をリストするクエリ
インスタンス上の各データベースを暗号化するために使用されている証明書。 以下を使用してデータを取得できますが、クエリをどのように作成しますか USE master GO -- this provides the list of certificates SELECT * FROM sys.certificates -- this provides the list of databases (encryption_state = 3) is encrypted SELECT * FROM sys.dm_database_encryption_keys WHERE encryption_state = 3; sys.certifcates.thumbprint列とsys.dm_database_encryption_keys.encryptor_thumbprint列に同じデータが含まれていることに気付きました。

2
varchar列のサイズを小さくすると、データベースファイルにどのような影響がありますか?
データベースにはVARCHAR(MAX)、a VARCHAR(500)(またはmaxよりもはるかに小さいもの)で十分な列を持つテーブルがいくつかあります。当然、これらをクリーンアップし、サイズをより合理的なレベルに下げたいと思います。これを行うための「方法」は理解しています:私の質問は、これらの列を変更すると、ディスク上のページとエクステントに何が影響するのでしょうか?(列を拡大すると何が起こるかについて多くの情報がありますが、列を縮小すると何が起こるかに関する情報を見つけるのが困難です。) 一部のテーブルは行数が非常に少ないため、変更のコストについては心配していませんが、一部は非常に大きく、潜在的に再編成されて多くのブロッキング/ダウンタイムが発生することを心配しています。実際には、メンテナンスウィンドウを見積もる方法が必要です。一般に、この場合のデータベースエンジンの動作をよりよく理解したいと思います。 前もって感謝します! 編集: 見ているテーブルは20個ありますが、行カウントが1,000を超えるテーブルは半分しかありません。最大のものにはほぼ100万行あります。最悪の違反者は、350,000行と4 VARCHAR(MAX)列からなるテーブルで、このVARCHAR(500)レベルまで縮小できます。

1
一意のインデックススキャン後に集計演算子が使用される理由
NULL不可の値に対してフィルター処理された一意のインデックスを持つテーブルがあります。クエリプランでは、distinctの使用があります。これには理由がありますか? USE tempdb CREATE TABLE T1( Id INT NOT NULL IDENTITY PRIMARY KEY ,F1 INT , F2 INT ) go CREATE UNIQUE NONCLUSTERED INDEX UK_T1 ON T1 (F1,F2) WHERE F1 IS NOT NULL AND F2 IS NOT NULL GO INSERT INTO T1(f1,F2) VALUES(1,1),(1,2),(2,1) SELECT DISTINCT F1,F2 FROM T1 WHERE F1 …

3
特定のインスタンスのデータベースによるCPU使用率を取得する方法は?
データベースごとのCPU使用率を検出する次のクエリを見つけましたが、異なる結果が表示されています。 WITH DB_CPU_Stats AS ( SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms] FROM sys.dm_exec_query_stats AS qs CROSS APPLY ( SELECT CONVERT(int, value) AS [DatabaseID] FROM sys.dm_exec_plan_attributes(qs.plan_handle) WHERE attribute = N'dbid') AS F_DB GROUP BY DatabaseID ) SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num], DatabaseName, [CPU_Time_Ms], CAST([CPU_Time_Ms] * 1.0 …

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