データベース管理者

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

2
大きなテーブルからグループごとに最大の価値を得るための効率的なクエリ
テーブルが与えられた場合: Column | Type id | integer latitude | numeric(9,6) longitude | numeric(9,6) speed | integer equipment_id | integer created_at | timestamp without time zone Indexes: "geoposition_records_pkey" PRIMARY KEY, btree (id) このテーブルには2000万件のレコードがありますが、比較的多くはありません。ただし、シーケンシャルスキャンが遅くなります。 max(created_at)それぞれの最後のレコード()を取得するにはどうすればよいequipment_idですか? 私はこのトピックの多くの回答を読んだいくつかのバリエーションを使用して、次の両方のクエリを試しました: select max(created_at),equipment_id from geoposition_records group by equipment_id; select distinct on (equipment_id) equipment_id,created_at from geoposition_records order by …

1
MySQLクエリによって実行されるI / O操作を推定する方法
AmazonのRDSでは、100万回のI / Oリクエストごとに約0.10ドルを支払います。トラフィックが非常に少ないデータベースに対して、非常に多数(数十万)のI / O要求が発生していることに気付きました。これを見て、さらに調査を行ったところ、6,000のユーザーWebサイトに対して、1か月に8億のI / O要求が発生し、1か月あたり約80ドルの費用がかかるという質問が見つかりました。 したがって、MySQLクエリが生成するI / O操作の数と、それらを最適化/最小化する方法を事前に知りたいです。クエリが実行するI / O操作の数を見積もる方法と、それらをできるだけ低く保つために従うことができる一般的な規則はありますか?
13 mysql 

2
sp_executesqlはクエリプランをいつ更新しますか?
私はDBAではないので、私の素朴さを許さなければなりませんが、データベースの変更とストアドプロシージャの統計を時間の経過とともに再コンパイルして、クエリプランを最新の統計で最新に保つ必要があることを理解しています。 私が最新の統計に対して再コンパイルされた私のデータベース内のストアドプロシージャ持つと仮定すると、いくつかのコードでストアドプロシージャをインライニングとそれを包むの意味するものは、一定の間隔をsp_executesql文では?プロシージャの再コンパイルの一部として行われていたクエリプランの更新が失われますか? この変更を行う前に考慮する必要のあるもの(権限以外)があれば、あなたの洞察に感謝します。 私はMSDNでこれを読みました: SQL Serverクエリオプティマイザーが既存の実行プランと新しいTransact-SQL文字列を一致させる機能は、特に複雑なTransact-SQLステートメントで、文字列のテキストのパラメーター値が絶えず変化することによって妨げられます。 だから、私がインラインしてラップしようとしているストアドプロシージャにsp_executesql実際にいくつかのパラメータが含まれていると仮定すると、これは私の実行計画がキャッシュされているが、SQL Serverがそれを見つけて再利用することをより難しくしているということですか?

7
PostgreSQL 9.3がUbuntuで起動しないのはなぜですか?
Ubuntu 12.04および13.04を実行している2つのVMのAPTリポジトリからPostgreSQL 9.3を正常にインストールしましたが、Ubuntu 12.04を実行しているホストマシンに正しくインストールできません。 インストール(今度は)はうまくいったようですが、おそらく私には理解できないエラーがあります: * No PostgreSQL clusters exist; see "man pg_createcluster" Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ... Creating new cluster 9.3/main ... config /etc/postgresql/9.3/main data /var/lib/postgresql/9.3/main locale en_US.UTF-8 port 5432 update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode. だから、私は自分をPostgreSQLユーザーとして追加しようとしますが、私はこれを取得します: createuser: could not connect to database postgres: could …

2
VACUUM FULLとCLUSTERのPostgreSQLの違い
200 GBのサイズがデータで占められ、180 GBのサイズが6つのインデックスで占められているテーブルがあります。それは30%肥大化していますので、それによって占有されている不要なスペースを回収したいと思います。job_id_idxインデックスでクラスター化されます。 スペースを再利用するには、clusterコマンドまたはvacuum fullコマンドを使用する必要がありますか? この2つのコマンドの違いは何ですか? vacuum fullある列の順序はclusterコマンドと同じですか? 両方のコマンドでインデックスが再作成されますか? 私の場合、どちらが速くなりますか? PostgreSQLデータベースのバージョンは9.1です

1
1つの外部IPを使用したCassandra multidatacenter構成
複数のデータセンターのCassandraクラスターをセットアップしようとしています。問題は、私のデータセンターには外部IP(wan IP)が1つしかないことです。別のポートを使用して外部から各ノードにアクセスするようにデータセンタースイッチでポート転送を設定できますが、cassandraの設定方法がわかりません.yamlファイルが適切に。 このシナリオでmultidatacenter cassandraクラスターをセットアップする方法はありますか? 前もって感謝します!
13 cassandra 

1
SQLCMDモードでの変数の設定
SQL Server 2008 R2 Enterprise Editionの使用 次の文を考慮してください。 :setvar source_server_name "SERVERNAME\INSTANCENAME" SQLCMDモードでTSQLを使用してその値を取得することは可能ですか 何かのようなもの: :setvar source_server_name = SELECT @@servername ありがとうございました アップデート7/15/2013 以下に示す2つの回答では、望ましい結果が得られなかったため、より関連性の高い試験を追加します。 :setvar source_server_name [myserver] 変数source_server_nameはテキスト文字列[myserver_1]に設定されます これをできるようにしたい: create table #tmp( id int identity(1,1), server sysname ) insert into #tmp values('myserver_1'),('myserver_2'); :setvar source_server_name = SELECT server FROM #tmp WHERE id = 1 select …

4
ディスク容量が不十分なため、データベースに新しいページを割り当てることができませんでした
SQL Serverのインポートおよびエクスポートウィザードを使用すると、次のエラーが表示されます。 エラー0xc0202009:データフロータスク1:SSISエラーコードDTS_E_OLEDBERROR。 OLE DBエラーが発生しました。エラーコード:0x80004005。 ファイルグループ「PRIMARY」のディスク領域が不十分なため、データベース「database」に新しいページを割り当てることができませんでした。ファイルグループにオブジェクトをドロップするか、ファイルグループにファイルを追加するか、ファイルグループ内の既存のファイルの自動拡張をオンに設定して、必要なスペースを作成します。 一連の2GBファイルをアップロードしようとしていますが、4番目のファイルの読み込み中に、(データベースプロパティ)>(ファイル)に移動し、ファイルグループの自動拡張を2500 MBに変更し、最大サイズを無制限にした後でも、上記のエラーメッセージが表示され続けます。 最善の回避策は何ですか?このデータは最終的に約60〜80 GBを占有します。
13 sql-server 

4
ネットワークを介した一括挿入
誰かがこれらを手伝ってくれますか? BULK INSERT DATABESE01.dbo.TABLE01 FROM '\\COMPUTER01\FOLDER01\TextFile.txt' WITH ( FIELDTERMINATOR = ' ', rowterminator = '\n', tablock ) エラーが表示され、開くことができませんでした: ファイル '\ SERVERNAME \ FOLDERNAME \ textFile.txt'を開けなかったため、一括挿入できませんでした。オペレーティングシステムエラーコード5(アクセスが拒否されました。) パスはネットワーク上の別のコンピューター上にあります。

2
より多くのCPUコアとより高速なディスク
私は小さな会社の一員なので、いつものようにさまざまな役割を担当しています。最新のものは、.NET Webアプリ専用のSQL Serverボックスを調達しています。32 GBのRAMを備えたデュアルXeon E5-2620(6コア)2.00 GHz CPU構成(合計12コア)で引用されています。これにより、ディスクアレイの予算が制限され、基本的にRAID 1構成の2つの2.5インチSAS 300 GBドライブ(15k RPM)で構成されます。 ディスクのセットアップがSQL Serverにとって最適ではないことを知っているので、データベース、ログファイル、およびtempdbを独自のドライブに配置できるように、RAID 10をプッシュしたいと考えています。これを予算と両立させるには、CPUコアの数を減らすことを検討する必要がありますか?それとも、コアを保持し、使用するドライブを少なくして、おそらくデュアルRAID 1セットアップで4台を使用することで、より良い銀行を獲得できますか? 追加の統計情報は次のとおりです SQL Serverデータベースは、おそらく80%対20%の多数の読み取りから書き込みに傾いています。現在のDBサイズは現在約10 GB、 26 GBで、1か月あたり250 MBの割合で増加しています。 現在、Webサーバー(RAID 1の12 GB Ram、2 x 10k 300GB SASドライブ)と共有されているシングルクアッドコアXeonボックスでSQL Server 2008 R2 Standardを実行し、SQL Server 2012 Standardへの移行を検討しています。 データベースは約100〜150人の同時ユーザーにサービスを提供し、バックグラウンドスケジューリングタスクがスローされます。これを読んで、12コアは深刻すぎると思います! SQL Azure DBにリンクされたAzureクラウドサービス(2つの小さなインスタンス)にアプリケーション全体をデプロイしました。テスト時のパフォーマンスは合理的でしたが(ほとんどゼロの負荷)、予測不可能だったため、本番環境で使用する勇気を失いました。スケールアウトのアプローチではうまくいくかもしれませんが、たった10 GBのデータベースを使用すれば、今すぐスケールアップしてお金を節約できます。 最初はライセンスコストを見落としていましたが、SQL Server 2012のライセンスがコアの数に基づいていることに気付きませんでした。SQL Server 2012 StandardライセンスのBizSpark MSDNサブスクリプションを持っているので、これがすぐに利用できるコアの数について調べる必要があります。


2
ExecutionInstanceGUIDをSSISDBに関連付ける
SQL Server Integration Servicesの2012リリースであるSSISは、(特に)パッケージの操作を追跡するSSISDBカタログを提供しています。プロジェクト展開モデルを使用するソリューションの既定のパッケージ実行では、SSISDBへのログ記録が有効になります。 パッケージが実行されると、にSystem::ExecutionInstanceGUID明示的なロギング(sys.sysdtslog90/ sys.sysssislog)を使用している場合、特定のパッケージ実行のすべてのイベントを記録する値が設定されます。 私が知りたいのですが、どのように私はExecutionInstanceGUIDを結ぶんですもの SSISDBカタログに。または、SSISDBで実行されるSSISパッケージは、その値のcatalog.executions.execution_id 最終的に、既存のカスタム監査テーブルを使用して、SSISDBカタログの詳細な履歴にリンクしようとしていますが、リンクが見つからないようです。

3
単一のコマンドでデータベース内のすべてのテーブルを変更する
データベース内のすべてのテーブルを変更する単一または1行のコマンドはありますか。データベース内のすべてのテーブルでこのコマンドを発行したいと思います。 ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8; 私の目的は、すべてのテーブルの文字セットをlatin1からutf8に変更することです。 更新: RDBMSはMySQLです

2
なぜ数字以外が「0-9」なのですか?
私のサーバーのデフォルトの照合は、次のクエリによって決定されるLatin1_General_CI_ASです。 SELECT SERVERPROPERTY('Collation') AS Collation; この照合により、述語を使用して文字列内の数字以外の文字と一致できることを発見して驚きましたLIKE '[0-9]'。 デフォルトの照合でこれが起こるのはなぜですか?これが役立つケースは考えられません。バイナリ照合を使用して動作を回避できることはわかっていますが、デフォルトの照合を実装する奇妙な方法のようです。 数字をフィルタリングすると、数字以外の文字が生成されます すべての可能なシングルバイト文字値を含む列を作成し、数字一致述語で値をフィルタリングすることにより、動作を実証できます。 次のステートメントは、現在のコードページの各コードポイントに1つずつ、256行の一時テーブルを作成します。 WITH P0(_) AS (SELECT 0 UNION ALL SELECT 0), P1(_) AS (SELECT 0 FROM P0 AS L CROSS JOIN P0 AS R), P2(_) AS (SELECT 0 FROM P1 AS L CROSS JOIN P1 AS R), P3(_) AS (SELECT 0 …

1
どちらが良いですか:多くの結合条件または多くのwhere条件?
2つのクエリを比較しようとしています。 クエリ1: SELECT a,b,c,d,e FROM tableA LEFT JOIN tableB ON tableA.a=tableB.a WHERE tableA.b=tableB.b AND tableA.c=tableB.c AND tableA.d=tableB.d AND tableA.e=tableB.e クエリ2: SELECT a,b,c,d,e FROM tableA LEFT JOIN tableB ON tableA.a=tableB.a AND tableA.b=tableB.b AND tableA.c=tableB.c AND tableA.d=tableB.d WHERE tableA.e=tableB.e これら2つのクエリで同じ結果が得られると言ってもいいですか? さらに、最初のクエリが、より大きなWHERE条件を実行するためのより大きなテーブルを作成すると言うのは正しいですか?一方、2番目のケースでは、より単純なテーブルがWHERE適用されたシンプルなテーブルが作成されます。 結果が同じであると仮定すると、どのクエリを優先する必要がありますか?明らかなパフォーマンスの問題はありますか?

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