データベース管理者

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

1
接続数の制限は何ですか?
https://devcenter.heroku.com/articles/heroku-postgres-legacy-plans接続制限が500であります あたりとしてhttps://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server「一般的に、良いハードウェア上のPostgreSQLは数百の接続をサポートすることができます」 この制限の決定要因は何ですか?#CPUコア?羊?OS?

1
緩やかに変化するディメンションに対してSQL Server 2016システムバージョンのテンポラルテーブルを使用したクエリ戦略
使用している場合、システムバージョン管理一時テーブル(SQL Serverの2016年新)が、この機能は大規模なリレーショナルデータウェアハウス内の寸法を変更ゆっくり処理するために使用されるクエリのオーサリングおよびパフォーマンスの意味は何ですか? たとえば、列を含む100,000行のCustomerディメンションと、外部キー列Postal Codeを含む数十億行のSalesファクトテーブルがあるとしCustomerIDます。そして、「顧客の郵便番号別の2014年の総売上」をクエリしたいとします。簡略化されたDDLは次のようなものです(わかりやすくするために多くの列を省略しています)。 CREATE TABLE Customer ( CustomerID int identity (1,1) NOT NULL PRIMARY KEY CLUSTERED, PostalCode varchar(50) NOT NULL, SysStartTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL, SysEndTime datetime2 GENERATED ALWAYS AS ROW END NOT NULL, PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime) ) WITH (SYSTEM_VERSIONING = ON); CREATE …

1
ページ数が1000未満のインデックスを再構築しませんか?
Ola Hallengrensスクリプトを使用して、インデックスをメンテナンスします。その前に、次のクエリを使用して、どのインデックスが最も断片化されているかを確認しました。 SELECT dbschemas.[name] as 'Schema', dbtables.[name] as 'Table', dbindexes.[name] as 'Index', indexstats.avg_fragmentation_in_percent, indexstats.page_count FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id] INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id] INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id] AND indexstats.index_id …

1
MySQL open_files_limit-この変数は変更できません
私のopen_files_limitmysqlはのみであるため、問題に直面しています1024。 Centos 7、MySQL Community Server 5.6.22-log 実際には、WHMサーバー用のmysql専用のvps(リモートmysql)ですが、それは重要です。 構成ファイル my.cnf: [mysqld] open_files_limit = 100000 open-files-limit = 100000 #I've read that the dashes are required on older versions, but I threw it in anyway. innodb_buffer_pool_size = 600M ... # and the same for mysqld_safe [mysqld_safe] open_files_limit = 100000 open-files-limit = 100000 ... …
17 mysql 

5
計算列にフィルター選択されたインデックスを作成できません
私の前の質問で、テーブルに新しい計算列を追加するときにロックエスカレーションを無効にすることは良い考えですか?、計算列を作成しています: ALTER TABLE dbo.tblBGiftVoucherItem ADD isUsGift AS CAST ( ISNULL( CASE WHEN sintMarketID = 2 AND strType = 'CARD' AND strTier1 LIKE 'GG%' THEN 1 ELSE 0 END , 0) AS BIT ) PERSISTED; 計算列はPERSISTEDであり、compute_column_definition(Transact-SQL)によると: 執着 データベースエンジンがテーブルに計算値を物理的に格納し、計算列が依存する他の列が更新されたときに値を更新することを指定します。計算列にPERSISTEDのマークを付けると、確定的ではあるが正確ではない計算列にインデックスを作成できます。詳細については、計算列のインデックスを参照してください。パーティションテーブルのパーティション列として使用される計算列には、明示的にPERSISTEDのマークを付ける必要があります。PERSISTEDが指定されている場合、compute_column_expressionは確定的でなければなりません。 しかし、列にインデックスを作成しようとすると、次のエラーが表示されます。 CREATE INDEX FIX_tblBGiftVoucherItem_incl ON dbo.tblBGiftVoucherItem (strItemNo) INCLUDE (strTier3) WHERE isUsGift = 1; …

2
INSERTステートメント内の行値式の数が、許可されている1000行値の最大数を超えています
INSERT INTOスクリプトの1つは次のように書かれています。 INSERT INTO tableName (Column1, Column2,....) VALUES (value1, Value2,...), (value1, Value2,...),.... 以下は、上記の挿入ステートメントの解析で直面しているエラーです メッセージ10738、レベル15、状態1、行1007 INSERTステートメントの行値式の数が、許可されている最大1000行値を超えています。 私の簡単な質問は、1000個の値の制限を変更できますか?

2
AlwaysOn可用性グループの使用中にトランザクションログを圧縮する
私たちは、使用しているAlwaysOn Availability Group2012年の正規完全データベースバックアップとトランザクションログのバックアップがセカンダリデータベース上で毎日行われているSQL Serverの機能を。 私は読んだことが、ここでのプライマリレプリカまたはセカンダリレプリカのいずれかにトランザクションログのバックアップを行うことは、再利用可能なよう両方のレプリカトランザクション・ログをマークします。とにかく、トランザクションログのバックアップサイズは大きく、縮小ファイルを使用して縮小できます。 データベースをローカルに復元し、縮小操作を実行しました。ログファイルのサイズは160 MBに縮小されました。 私の質問は、どのデータベースでトランザクションログファイル(プライマリ、セカンダリ、またはその両方)の縮小操作を実行する必要があるかということです。 過去数年間、ログファイルのバックアップは作成されていなかったため、非常に大きくなりました。実行するDBCC SQLPERF (LOGSPACE)と0.06%、ファイルのみが使用されていることがわかります。このような巨大なサイズのログファイルを保持する意味はありません。で[sys].[database_files]、私はそのことを確認してくださいがmax_sizeに設定されている-1とgrowthする65536ことは、それが得るより多くのスペースを必要とするとき、私は推測するようにします。とにかく、将来の成長を防ぐために、たとえば5%に縮小できます。私はそうすることは悪い考えではないという確認を見つけようとしています。 実際、(データベースとログファイルの)バックアップはセカンダリデータベースでのみ実行されるため、それらのデータベースでシュリンクファイルを実行する方が簡単ですが、プライマリログファイルのサイズも小さくなりますか?

2
SQL Serverが実際に使用しているコアの数を確認するにはどうすればよいですか?
SQL Serverを実行している2つのサーバーがあります。 サーバー1:SQL Server 2008 R2 Express(4コア) サーバー2:SQL Server 2012 Developer Edition(8コア) 私の知る限り、SQL Server 2008 R2 Expressは1つのコアのみを使用する必要があります。 SQL Server 2012 Developerバージョンでは、8つのコアすべてを使用する必要があります。 ただし、SQL Server 2008 R2 ExpressでSQLクエリ内で次のコマンドを実行すると、4つのコアが表示されます。 select scheduler_id, cpu_id, status, is_online from sys.dm_os_schedulers where status = 'VISIBLE ONLINE' 適切なコマンドを使用して使用量を測定していますか?


2
VARCHARからVARBINARYへの変換
パフォーマンスの傾向を監視し、最適化が必要な領域を特定できるように、実行中の高価なクエリのログとクエリプランをテーブルに保存しています。 ただし、クエリプランが多くのスペースを占有するようになります(各クエリに対してプラン全体を保存しているため)。 したがって、QueryPlanHashとQueryPlanを別のテーブルに抽出することにより、既存のデータを正規化しようとしています。 CREATE TABLE QueryPlans ( QueryPlanHash VARBINARY(25), QueryPlan XML, CONSTRAINT PK_QueryPlans PRIMARY KEY ( QueryPlanHash ) ); query_plan_hashin の定義はsys.dm_exec_query_statsバイナリフィールドであるため(また、定期的に新しいデータを挿入します)、VARBINARY新しいテーブルのデータ型に使用していました。 ただし、以下の挿入は失敗します... INSERT INTO QueryPlans ( QueryPlanHash, QueryPlan ) SELECT queryplanhash, queryplan FROM ( SELECT p.value('(./@QueryPlanHash)[1]', 'varchar(20)') queryplanhash, QueryPlan, ROW_NUMBER() OVER (PARTITION BY p.value('(./@QueryPlanHash)[1]', 'varchar(20)') ORDER BY DateRecorded) rownum FROM …


5
なぜCASEステートメントを使用して列が存在するかどうかを確認し、その列からSELECTできないのですか
なぜこのようなものが機能しないのですか? SELECT CASE WHEN NULLIF(COL_LENGTH('Customers', 'Somecol'), '') IS NULL THEN NULL ELSE Somecol END AS MyTest FROM Customers; 列が存在するかどうかを確認しているだけですが、SQL Server Somecolは存在しないことについて不平を言っています。単一のステートメントでこれに代わるものはありますか?
17 sql-server  t-sql 

1
bashのreverse-search-historyに相当するpsqlはありますか?
bashの逆検索履歴(Cr)(コマンドライン機能)が非常に好きです。 現在の行から後方に検索し、必要に応じて履歴を「上」に移動します。これはインクリメンタル検索です。 をヒットcontrol-rするbashと、次の結果が得られます。 (reverse-i-search)`': また、以前に実行したコマンドの文字を入力して、探しているものに絞ることができます。間違えた場合は、入力control-hして文字を消去できます(と同等backspace)。 このコマンドライン機能により、以前に実行したコマンドを非常に簡単に参照できます。そのような能力が存在するかどうか疑問ですpsql。私はそれが非常に非効率的なだけに頼ることを見つけるcontrol-pとcontrol-n。 それが価値があるもののために、私は使用しPostgreSQL 9.3.1 on x86_64-apple-darwin13.0.0, compiled by Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn), 64-bitています-Postgres.appから取得しました。

1
Amazon RDSからpostgresスナップショットを取得する
Amazon RDS postgresインスタンスの夜間バックアップのコピーを取得する簡単な方法が見つからないため、ローカルマシンで復元して再生できます。 現在、コピーが必要なときにpg_dumpを実行していますが、これらのスナップショットをダウンロードできる方が良いでしょう(おそらく高速です)。これは不可能ですか?

8
大きなID値を避ける理由
私たちは、ユーザーがまだアクセスできないWebアプリケーションに取り組んでいます。上司は、テーブルに100未満のレコードしかないにもかかわらず、新しく作成されたレコードが10000を超えるIDを取得することに気付きました。彼女は、何らかの理由でWebインターフェースが実際のレコードよりも100倍以上の一時的なレコードを作成(および削除)し、これによりリリース後数か月以内に範囲外になる可能性があると考えました。 彼女はIDインフレーションの原因について正しいとは思わない(これに答えることができる同僚は休暇中なので、私たちは確実に知らない)が、彼女がそうであると仮定しよう。彼女は、bigintカラムを使用するのは嫌いで、IDカラムの自動インクリメントを停止し、最初の「未使用」整数を選択してそれをIDとして使用するサーバー側コードを記述してほしいと言いました。 私はコンピューターサイエンスの大学院生であり、実務経験がほとんどなく、開発者の若手として働いています。彼女は、当社のすべてのデータベースを管理し、それらのほとんどを設計した長年の経験を持っています。私が考える BIGINT IDがの恐れることは何もない、とDBMSの機能を模倣することはアンチパターンの匂いということを、彼女はこの場合には正しくないということ。しかし、私はまだ自分の判断を信用していません。 各ポジションの賛否両論は何ですか?bigintを使用すると、どのような悪いことが起こる可能性がありますか?ホイールの自動インクリメント機能を再発明することの危険性は何ですか?どちらよりも優れた3番目のソリューションはありますか?IDの額面価格の上昇を避けたい理由は何でしょうか?私は実用的な理由についても興味があります-bigint IDは理論的には機能するかもしれませんが、実際には頭痛の種になりますか? アプリケーションが非常に大量のデータを処理することは想定されていません。今後数年以内に実際の記録が10,000件に達するとは思わない。 違いがある場合は、Microsoft SQLサーバーを使用しています。アプリケーションはC#で記述され、Linq to SQLを使用します。 更新 ありがとう、私は既存の答えとコメントがおもしろいと思った。しかし、あなたは私の質問を誤解したのではないかと思うので、彼らは私が知りたいことを含んでいます。 高いIDの本当の理由についてはあまり心配していません。自分で見つけられない場合は、別の質問をすることができます。私が興味を持っているのは、この場合の決定プロセスを理解することです。このため、アプリケーションが1日あたり1000レコードを書き込み、そのうちの9999レコードを削除すると想定してください。これは事実ではないと確信していますが、これは上司が要求したときに信じていたものです。したがって、これらの仮想的な状況では、bigintを使用するか、IDを割り当てる独自のコードを作成することの長所と短所は何ですか(すでに削除されたレコードのIDを再利用し、ギャップがないようにする)? 実際の理由については、別のデータベースからデータをインポートするコードを書いたことが、後の移行がある程度できるという概念の証明として、私が強く疑っています。私の同僚は、実際にインポート中に数千のレコードを作成し、後でそれらを削除したと思います。これが実際にそうだったかどうかを確認する必要がありますが、もしそうなら、アクションの必要さえありません。

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