データベース管理者

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

2
乱数と結合タイプを使用した予期しない結果
4つの乱数(1から4)を取得し、結合して一致するdatabase_id番号を取得する単純なスクリプトがあります。LEFT JOINを使用してスクリプトを実行すると、毎回4行が返されます(予想される結果)。ただし、INNER JOINを使用して実行すると、行の数が変化します(2行、8行の場合もあります)。 論理的には、sys.databasesにdatabase_ids 1〜4の行が存在することがわかっているため、違いはありません。また、(結合するのではなく)4つの行を持つ乱数テーブルから選択しているため、4行以上が返されることはありません。 これはSQL Server 2012と2014の両方で発生します。INNERJOINがさまざまな行数を返す原因は何ですか? /* Works as expected -- always four rows */ SELECT rando.RandomNumber, d.database_id FROM (SELECT 1 + ABS(CHECKSUM(NEWID())) % (4) AS RandomNumber FROM sys.databases WHERE database_id <= 4) AS rando LEFT JOIN sys.databases d ON rando.RandomNumber = d.database_id; /* Returns a varying number …
16 sql-server  t-sql 

3
ネットワーク遅延が増加すると、MS SQL Serverでテーブルロックが発生しますか?
高遅延ネットワークを介してSQL Serverデータベースを1回呼び出している場合、その遅延のためにテーブルロックが発生しますか?たとえば、テーブルAにいくつかのレコードを照会すると、SQL Serverはそのデータを低速ネットワーク経由で返す必要があります。サーバーがネットワーク経由で応答を送信するか、SQL Serverが送信前にロックを解除する間にテーブルAに読み取りロックが発生します応答? また、回答のサイズに基づいて答えは異なりますか?数KBと数百MBを返すだけでよい場合、違いはありますか? 明示的にトランザクションを作成し、クエリを実行し、トランザクションを閉じると、トランザクションの期間がレイテンシと相関するため、明らかにテーブルがロックされます。

5
データベースエンジンの回復ハンドルが失敗するのを待ちます。SQL Serverエラーログで潜在的な原因を確認してください[終了]
閉じた。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 2年前に閉店しました。 SQL2008R2-SQL2012-sql2014をインストールしようとしました 2014-07-17 16:31:16.00 spid14s Error: 17190, Severity: 16, State: 1. 2014-07-17 16:31:16.00 spid14s Initializing the FallBack certificate failed with error code: 1, state: 20, error number: 0. 2014-07-17 16:31:16.00 spid14s Unable to initialize SSL encryption because a valid certificate could not be found, and it is not …

1
PostgreSQLのGEQO(遺伝子クエリ最適化)の変更
PostgreSQLのGEQO機能に沿った機能を実装する必要があります。GEQOのアプローチはクエリプランを整数文字列としてエンコードすることであり、GEQOはこれらの可能な結合シーケンスをランダムに生成することを理解しています。ソース:http : //www.postgresql.org/docs/9.3/static/geqo-pg-intro.html 私の質問:正しい結合シーケンスを明確に知っている場合にGEQO関数を変更し、異なる結合シーケンスを検索する必要がないようにする方法。たとえば、4つの関係を結合する最適な方法が4-1-3-2であることがわかっていれば、他の順列をチェックする必要はありません。 GEQOがPostgreSQLにどのように実装されているかについての良い資料はありません。PostgreSQLはGEQO機能の全体像のみを提供しますが、あまり説明しません。 または、GEQOを使用せずにstandard_join_search()自体でこの機能を実現できますか?

1
ctidをページ番号と行番号に分解するにはどうすればよいですか?
テーブルの各行には、行の物理的な場所を表すタイプのシステム列が ctidありますtid。 create table t(id serial); insert into t default values; insert into t default values; select ctid , id from t; ctid | id :---- | -: (0,1)| 1 (0,2)| 2 ここに dbfiddle ctid最も適切なタイプ(例えばinteger、bigintまたはnumeric(1000,0))からページ番号だけを取得する最良の方法は何ですか? 私は考えることができる唯一の方法は非常に醜いです。

1
ASYNC_NETWORK_IO待機タイプは心配することはありますか?
実行に長い時間がかかるストアドプロシージャのリストを見ると、待機時間が最も多いことが際立っています。ただし、その待機時間のほとんど(81%)はASYNC_NETWORK_IOであり、その理由はわかっています。ストアドプロシージャは約400 MBの情報を転送します。 ドキュメントでは、ASYNC_NETWORK_IOの原因は、クライアントがデータのフラッドに追いつくことができないことであり、それはおそらく真実であると述べています。クライアントがADO.NET経由でストアドプロシージャを呼び出してからデータセットを処理するだけなので、クライアントを維持する方法がわかりません。 したがって、この情報が与えられた場合、この手順のASYNC_NETWORK_IO待機タイプについて心配する必要がありますか?実際にサーバーのパフォーマンスに影響しますか? 追加情報: SQL Server 2005のサービスパック2を使用しています。 クライアントアプリは、SQL Serverと同じボックス上にあります(私は知っています...知っていますが、それについては何もできません)。

4
可変列を使用したテーブル設計の処理方法
私はテーブル設計シナリオを持っていますが、非DBAタイプとして、よりスケーラブルな意見を求めています。 メトロエリアの家に関する情報を記録するように求められたとします。小さな近所(200の家)から始まり、最終的には5000000以上の家に成長します。 基本情報を保存する必要があります:ID#(一意のインデックスとして使用できる一意のロット番号)、Addr、City、State、Zip。素晴らしくシンプルなテーブルがそれを処理します。 しかし、毎年、すべての家に関する追加情報を記録するように求められます-そして、何の情報は毎年変わります。したがって、たとえば、最初の年には、所有者の姓と面積を記録するように求められます。2年目は、姓を残すよう求められますが、面積を捨てて、代わりに所有者の名の収集を開始します。 最後に-毎年、追加の列の数が変更されます。余分な2つの列から始めて、来年は6に、その後2に戻すことができます。 そのため、テーブルのアプローチの1つは、ハウステーブルの列としてカスタム情報を追加して、テーブルが1つだけになるようにすることです。 しかし、私は誰かがこれのためにテーブルを次のようにレイアウトする状況を持っています: 「House Table」列:ID、Addr、City、State、Zip-家ごとに1行 ID Addr City State Zip ------------------------------------------- 1 10 Maple Street Boston MA 11203 2 144 South Street Chelmsford MA 11304 3 1 Main Avenue Lowell MA 11280 「カスタム情報テーブル」列:ID、名前、値-テーブルは次のようになります。 ID Name Value 1 Last Name Smith 2 Last Name Harrison 3 Last …

1
サブクエリが並列処理を使用し、結合が使用しないのはなぜですか?
サブクエリを使用するこのクエリを実行するときに、SQL Serverが並列処理を使用するのはなぜですか?結合バージョンはシリアルで実行され、完了するまでに約30倍時間がかかります。 参加バージョン:〜30秒 副照会バージョン:<1秒 編集: クエリプランのXmlバージョン: JOINバージョン サブクエリバージョン

3
SQL Serverの互換モードを100から110に変更することの意味
MydatabaseSQL Server 2008 R2でデータベースを作成しています。SQL Server 2012にアップグレードしました。 私はパーセンタイルを計算するために以下のクエリを実行しようとしました select Distinct [KEY],PERCENTILE_CONT(0.25) within group(order by EachPrice) OVER(Partition By [KEY]) As Q1,PERCENTILE_CONT(0.50) within group(order by EachPrice) OVER(Partition By [KEY]) As Q2, PERCENTILE_CONT(0.75) within group(order by EachPrice) OVER(Partition By [KEY]) As Q3, PERCENTILE_CONT(1) within group(order by EachPrice) OVER(Partition By [KEY]) As Q4 from Mydatabase …

3
PostgreSQL(または一般的なSQL)にビジネスロジックのアクセス許可を実装する方法は?
アイテムのテーブルがあると仮定しましょう: CREATE TABLE items ( item serial PRIMARY KEY, ... ); 次に、各アイテムの「アクセス許可」の概念を紹介します(ここでは、データベースアクセス許可についてではなく、そのアイテムのビジネスロジック許可について説明していることに注意してください)。各アイテムにはデフォルトの許可があり、デフォルトの許可よりも優先されるユーザーごとの許可もあります。 私はこれを実装するいくつかの方法を考えて、次の解決策を考え出しましたが、どれが最良であり、なぜかについてはわかりません。 1)ブール解 各権限にブール列を使用します。 CREATE TABLE items ( item serial PRIMARY KEY, can_change_description boolean NOT NULL, can_change_price boolean NOT NULL, can_delete_item_from_store boolean NOT NULL, ... ); CREATE TABLE item_per_user_permissions ( item int NOT NULL REFERENCES items(item), user int NOT …
16 postgresql  enum 

4
SQL Server 2008 R2エラー:15023、ユーザー、グループ、またはロールは既に存在します
権限の問題があるテストデータベースがあります。 レポートデータベースにアクセスできず、アプリケーションのヘルプドキュメントに次のことが記載されています。 Resolution: 1. Launch the SQL Server Management Studio and connect to the database server(s) hosting the Vision and Reporting Server databases. 2. Expand the security folder. 3. Select logins and right click on the <username> user and choose properties. 4. Click the User Mapping tab 5.Make sure the …

3
Oracleは長いキーに一意のインデックスを使用していません
テストデータベースに25万行のテーブルがあります。(本番環境には数億個あります。同じ問題があります。)テーブルには、nvarchar2(50)文字列識別子があり、nullではなく、一意のインデックスが付いています(PKではありません)。 識別子は、テストデータベースに8つの異なる値(および運用中に約1000)を持つ最初の部分、@記号、最後に1〜​​6桁の数字で構成されます。たとえば、「ABCD_BGX1741F_2006_13_20110808.xml @」で始まる5万行があり、その後に5万の異なる数字が続く場合があります。 識別子に基づいて単一の行を照会すると、カーディナリティは1と推定され、コストは非常に低く、正常に機能します。IN式またはOR式で複数の識別子を使用して複数の行を照会すると、インデックスの推定が完全に間違っているため、テーブル全体のスキャンが使用されます。ヒントを使用してインデックスを強制すると、非常に高速になります。実際には、テーブル全体のスキャンが1桁遅く実行されます(運用環境でははるかに遅くなります)。それはオプティマイザーの問題です。 テストとして、まったく同じDDLとまったく同じコンテンツを使用してテーブル(同じスキーマ+テーブルスペース)を複製しました。適切な測定のために最初のテーブルに一意のインデックスを再作成し、クローンテーブルにまったく同じインデックスを作成しました。私はDBMS_STATS.GATHER_SCHEMA_STATS('schemaname',estimate_percent=>100,cascade=>true);。インデックス名が連続していることもわかります。したがって、2つのテーブルの唯一の違いは、最初のテーブルが長期間にわたってランダムな順序でロードされ、ブロックがディスクに(他のいくつかの大きなテーブルと一緒にテーブルスペースで)散らばっていることです。 INSERT-SELECT。それ以外、違いは想像できません。(元のテーブルは最後の大規模な削除以降縮小されており、その後の単一の削除はありません。) 病気のテーブルとクローンテーブルのクエリプランを次に示します(黒いブラシの下の文字列は、画像全体で同じであり、灰色のブラシの下でも同じです) (この例では、黒のブラシをかけられた識別子で始まる1867行があります。2行クエリは1867 * 2のカーディナリティを生成し、3行クエリは1867 * 3のカーディナリティを生成します。偶然ですが、Oracleは識別子の終わりを気にしていないようです) この動作の原因は何ですか?本番環境でテーブルを再作成するのは明らかに高価です。 USER_TABLES:http: //i.stack.imgur.com/nDWze.jpg USER_INDEXES:http : //i.stack.imgur.com/DG9um.jpg スキーマとテーブルスペース名のみを変更しました。テーブルとインデックスの名前は、クエリプランのスクリーンショットと同じであることがわかります。

2
SQL Server 2012の新しいDB名へのバックアップの復元
2008年に、復元ウィザードの[接続先データベース]フィールドの名前を変更することで、DBの新しいコピーにバックアップを復元できることを覚えているようです。これにより、新しいDBが作成されます。これは、元のDBのコピーであり、必要な時点に復元されます。私は、SQL 2012でこれを行う方法を理解していませんでした。 今、私は(アーロン・バートランドのおかげで)これは実際には変わらなかったことを理解し、2012年はこの戦略がそもそも悪い考えであったことを実際に私に明らかにしている! そのため、私がする必要があるのは、バックアップファイルを使用して、既存のデータベース「MyDB」から新しいデータベース「MyDB_Copy」を作成することです。毎晩の完全バックアップ(.bak)と15分ごとのTLog(.trn)があります。既存の「MyDB」が「ライブ」であるため、まったく影響を受けたり触れられたりしたくない。 メインのフルバックアップファイルからMyDB_Copyを作成した後、特定の時点に戻すために、数十個のTLogバックアップを復元する必要があります。

4
MySQLインポートCSVファイルエラー13(HY000):/path/file.csvの統計情報を取得できません(エラーコード:2)
私はMySQL(5.5.34)/ Linux(Ubuntu 12.04 LTS)の絶対的な初心者です ` 1つのテーブルを持つ単純なデータベースを作成しました。'data_test.csvファイルを使用してデータをインポートしようとすると、エラーメッセージ13が表示されます。 ターミナルからの実行は次のとおりです。 mysql> source /home/g/stockrecdb/load_test.sql; Database changed ERROR 13 (HY000): Can't get stat of '/home/stockrecdb/data_test.csv' (Errcode: 2) mysql> 注:LOAD DATA LOCAL INFILEでLOCALを使用すると、エラーが表示されます:エラー1148(42000):このMySQLバージョンでは使用されたコマンドは許可されません
16 mysql  errors  csv 

1
「最大ユーザー接続」エラーを取り除く方法は?
私は私のウェブアプリにMySQLiを使用していますが、特定のページにアクセスしたいときはいつでも、 mysqli_connect() [function.mysqli-connect]: (42000/1203): User ***_user already has more than 'max_user_connections' active connectionsます。 すでにすべての接続を閉じようとしましたが、これは状況を改善しません。 特定の瞬間に開いている接続や、この問題の解決に役立つその他の有用なデータを正確に知る方法はありますか? ところで、私はPHP 5.2.17とMySQL 5.1を使用しています。

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