データベース管理者

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


4
一部のフィールドを除くMysqldumpテーブル
いくつかのフィールドなしでテーブルをmysqldumpする方法はありますか? 説明させてください 。MySQLデータベースがありますtests。でtests、私は3つのテーブルを持っている:USER、TOTOとTATA。tableのいくつかのフィールドをmysqldumpしたいだけUSERなmailのでip_login、などのいくつかのフィールドを除外します。 これどうやってするの?
14 mysql  mysqldump 

4
良い、悪い、または無関心:WHERE 1 = 1
redditに関するこの質問を踏まえて、クエリをクリーンアップして、クエリのどこに問題があるのか​​を指摘しました。最初にコンマを使用しWHERE 1=1、クエリの変更を簡単にするため、クエリは通常、次のようになります。 SELECT C.CompanyName ,O.ShippedDate ,OD.UnitPrice ,P.ProductName FROM Customers as C INNER JOIN Orders as O ON C.CustomerID = O.CustomerID INNER JOIN [Order Details] as OD ON O.OrderID = OD.OrderID INNER JOIN Products as P ON P.ProductID = OD.ProductID Where 1=1 -- AND O.ShippedDate Between '4/1/2008' And '4/30/2008' And P.productname …

4
結合は実行時にwhere節に最適化されていますか?
このようなクエリを作成すると... select * from table1 t1 join table2 t2 on t1.id = t2.id SQLオプティマイザーは、それが正しい用語であるかどうかはわかりませんが、それを... select * from table1 t1, table2 t2 where t1.id = t2.id 基本的に、SQL ServerのJoinステートメントはsqlを書くための簡単な方法ですか?それとも、実際に実行時に使用されますか? 編集:私はほとんど常に、そしてほとんど常にJoin構文を使用します。私は何が起こるのか興味があります。


4
MySQLのLOAD DATA INFILEは、InnoDBエンジンでの入力のいくつかのギグの後、80%遅くなります
LOAD DATA INFILEを介して100GBのファイルをロードしています。私はMyISAMで数時間成功しました。 私は今InnoDBを使って試しています。ロードは10MB /秒以上で高速に開始されます(テーブルファイルの増大を監視し、file_per_tableオンになっています)。 しかし、約5 GBのデータの後、2〜4 MB /秒の範囲に低下します。20GBを超えると、約2 MB /秒になりました。 InnoDBバッファープールのサイズは8Gです。そして、LOAD DATA INFILEコマンドを実行する前に次のことを行いました。 SET @@session.sql_log_bin=0; SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0; alter table item_load disable keys; //Run LOAD DATA INFILE.... 開始が順調に進み、時間がたつにつれて速度が低下している理由がわかりません。 また、同じ設定を使用して、InnoDBとMyISAMおよび5GBテストデータセットを使用したテーブルで同じLOAD DATA INFILEコマンドを実行すると、MyISAMは20倍高速になりました。 InnoDB: mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load; Query OK, 2630886 …

1
31億行のデータを管理する方法は?
私は現在、比較的大量のデータ用のストレージスキーマの実装を担当しています。データは主に現在のdata point値を判断するためにアクセスされますが、データの傾向分析のために過去6か月の履歴を追跡する必要もあります。 最近の要件は、過去1時間のmin/ max/ sum値を追跡するために追加されました。 注:理想的には、MongoDBオプションを検討したいと思いますが、最初にSQL-Serverオプションを使い果たしたことを示す必要があります。 データ 次の表は、プライマリデータソース(最も頻繁にクエリされる)を表しています。テーブルには約500万行が含まれます。データの変更は主に、初期データのロード後のUPDATE非常に不定期のINSERTステートメントを伴うステートメントになります。dataPointIdあなたがいつも選択するので、私はデータをクラスタリングすることを選びましたall values for a given data point。 // Simplified Table CREATE TABLE [dbo].[DataPointValue]( [dataPointId] [int] NOT NULL, [valueId] [int] NOT NULL, [timestamp] [datetime] NOT NULL, [minimum] [decimal](18, 0) NOT NULL, [hourMinimum] [decimal](18, 0) NOT NULL, [current] [decimal](18, 0) NOT NULL, [currentTrend] [decimal](18, 0) …

5
「巨大な」データベーステーブルPKのシーケンシャルGUIDまたはbigint
この種の質問がたくさん出てくることは知っていますが、この決定を下すのに役立つ説得力のある議論をまだ読んでいません。我慢してください! 私には巨大なデータベースがあります-それは1日あたり約10,000,000レコード増加します。データはリレーショナルであり、パフォーマンス上の理由から、BULK COPYでテーブルをロードします。このため、行のキーを生成する必要があり、IDENTITY列に依存することはできません。 64ビット整数(bigint)は使用するのに十分な幅がありますが、一意性を保証するには、IDを作成するための集中ジェネレーターが必要です。私は現在、サービスがXシーケンス番号を予約し、衝突がないことを保証するようなジェネレーターサービスを持っています。ただし、この結果は、私が持っているすべてのサービスがこの1つの集中ジェネレーターに依存しているため、システムの配布方法が制限され、他の依存関係(ネットワークアクセスの要求など)に満足できませんこの設計によって。これはときどき問題になりました。 プライマリGUID(SQLの外部で生成される)としてシーケンシャルGUIDを使用することを検討しています。私自身のテストで確認できた限り、これらの唯一の欠点は、より広いデータ型のディスク領域のオーバーヘッドです(インデックスでの使用により悪化します)。bigintの選択肢と比較して、クエリのパフォーマンスが目に見えるほど遅くなることはありません。BULK COPYを使用したテーブルのロードはわずかに遅くなりますが、それほどではありません。GUIDベースのインデックスは、シーケンシャルGUID実装のおかげで断片化されていません。 基本的に、私が知りたいことは、私が見落としているかもしれない他の考慮事項があるかどうかです。現時点では、私は飛躍してGUIDを使い始めたいと思っています。私は決してデータベースの専門家ではないので、どんなガイダンスでも大歓迎です。

1
PostgreSQL:リレーションの許可が拒否されました
PostgreSQLで権限を設定することについて少し混乱しています。 私にはこれらの役割があります: List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- admin | Superuser, Create role, Create DB, Replication | {} meltemi | Create role, Create DB | {rails} rails | Create DB, Cannot login | {} myapp | | {rails} およびデータベース: List of databases Name | Owner …

1
インデックススプールの強制
パフォーマンス上の理由で避けるべきものを知っていますが、表示されないようにする方法のデモとして表示される状態を表示しようとしています。 ただし、インデックスが欠落しているという警告が表示されますが、オプティマイザーは一時インデックスを作成しないことを選択します。 私が使用しているクエリは SELECT z.a FROM dbo.t5 AS z WITH(INDEX(0)) WHERE EXISTS ( SELECT y.a FROM dbo.t4 AS y WHERE y.a = z.a ) OPTION (MAXDOP 1); テーブルスキーマは次のとおりです。 CREATE TABLE dbo.t4 ( a integer NULL, b varchar(1000) NULL, p varchar(100) NULL ); CREATE TABLE dbo.t5 ( a integer NULL, b …

3
IN()を使用してクエリのパフォーマンスを改善する
次のSQLクエリがあります。 SELECT Event.ID, Event.IATA, Device.Name, EventType.Description, Event.Data1, Event.Data2 Event.PLCTimeStamp, Event.EventTypeID FROM Event INNER JOIN EventType ON EventType.ID = Event.EventTypeID INNER JOIN Device ON Device.ID = Event.DeviceID WHERE Event.EventTypeID IN (3, 30, 40, 41, 42, 46, 49, 50) AND Event.PLCTimeStamp BETWEEN '2011-01-28' AND '2011-01-29' AND Event.IATA LIKE '%0005836217%' ORDER BY Event.ID; …

1
SSMSからタブ区切りファイルをクエリできますか?
Sql Server Management Studioからタブ区切りファイルをクエリして、どこにも保存せずにデータを表示することは可能ですか? 私はあなたがBULK INSERT次のようなものを使用してタブ区切りファイルからできることを知っています: BULK INSERT SomeTable FROM 'MyFile.txt' WITH ( FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n'); ただし、事前に列を把握し、データを保持するテーブルを作成する必要があります。 またOPENROWSET、次のようなExcelドライバーを使用して事前に列を定義せずに、CSVやExcelなどの他のファイルタイプを照会できることも知っています。 -- Query CSV SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Text;Database=\\Server\Folder\;HDR=Yes;', 'SELECT * FROM MyFile.csv') -- Query Excel SELECT * FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 'Excel 8.0;Database=MyFile.xls', 'SELECT * FROM [Sheet1$]') 私は、レジストリキーを変更した場合も、Format下HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\TextからCSVDelimitedのTabDelimitedSQL Server上で、上記のCSVクエリは正しく、私は私が欲しいとは思わないので、しかし、それはもはや、カンマ区切りのテキストファイルを読み込みます、タブ区切りのテキストファイルを読み込みませんそのままにしておきます。 …

2
巨大なテーブルのパフォーマンスチューニング(SQL Server 2008 R2)
背景: UATフェーズにファクトテーブルがあります。Prodに5年間のデータをロードする目的(予想されるサイズ4億Mnレコード)現在、テストのデータはわずか2年です。 テーブルの特徴: 次元数〜45 対策〜30 非加法メジャーとその他の列〜25 現在のデータサイズ〜2億(2年間のデータ) タイムビュー:3つの異なる月ビュー:会計/カレンダー/調整(つまり、同じ行が探しているビューに基づいて異なる月に分類される場合があります) ユーザーが一度に必要とするビューは1つだけです。(つまり、クエリで使用されるのは1つのMonth列のみです。これにより、時間表示でパーティション分割ができなくなります) インデックス:Natural Keysに1つのクラスター化インデックス(8列)。ディメンションSK(FK)とすべてのメジャーを含む各Month列に1つずつ非クラスター化インデックスをカバーする3つを作成しました。 このため、インデックスは巨大です(合計190 GB)。 スペースに制約はありません(1 TBが割り当てられています) サーバーで使用可能な64 GBのRAM。 テーブルの圧縮も完了しました。 要件: このファクトテーブルのクエリは、30秒以内に結果を返す必要があります(一般的なクエリは、Dim値でいくつかのDimsグループに参加するsum(measure)を選択します)。レポートは、このファクトテーブルの上で直接行われます。 問題: インデックスで使用可能な列を含むクエリはすべて正常に機能しますが、インクルードにない他の列を含めると.. 5〜10分以上かかります。選択したディメンション/列でうまく機能するソリューションを提案できますか?この状況でインデックスビューは役立ちますか?

1
PostgreSQLでプールサイズとデータベース接続のスイートスポットを決定する方法
データベースサーバーへのピーク時にトラフィックを処理できません。ハードウェアの改善を検討しています(その点についてはこの質問をご覧ください)が、プーリング構成とサーバーの調整にも取り組みたいと考えています。 私たちが取り組んでいるアプリケーションは、スマートフォン向けのターンベースのマルチプレイヤーゲームです。バックエンドは、ユニコーンとPostgreSQL 9.1をデータベースとするRailsで構成されています。現在、登録ユーザーは60万人で、ゲームの状態はデータベースに保存されているため、数秒ごとに数千の書き込みが行われます。PgBadgerを使用してPostgreSQLのログファイルを分析しましたが、重要な時間帯に大量の FATAL: remaining connection slots are reserved for non-replication superuser connections この問題に対処するための単純な解決策は、postgresql.confのmax_connections(現在は100) を増やすことです。私はhttp://wiki.postgresql.org/wiki/Number_Of_Database_Connectionsを読みましたが、これはこれが正しいことではないかもしれないことを示しています。前述の記事では、max_connectionsとpool sizeの間のスイートスポットを見つけることに言及しています。 このスイートスポットを見つけるために何ができますか?max_connectionsとプールサイズの異なる値のI / Oパフォーマンスを測定するための優れたツールはありますか? 現在の設定では4台のゲームサーバーがあり、各サーバーにはユニコーンワーカーが16人、プールサイズが5です。 以下は、使用しているデフォルト以外のpostgres-settingsです。 version | PostgreSQL 9.1.5 on x86_64-unknown-linux-gnu,compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit checkpoint_completion_target | 0.9 checkpoint_segments | 60 checkpoint_timeout | 6min client_encoding | UTF8 effective_cache_size | 2GB lc_collate | …
14 postgresql 

2
Oracle PL / SQLには標準のASSERTルーチンがありますか?
私は、他の言語で見られるものと機能的に類似したASSERTルーチンを使用したいと思います。つまり、コンストラクト(プロシージャ、構文など)です。 ASSERT( <condition>, <msg>) その<condition>ため、最初の引数で渡された値がfalseの場合、指定された<msg>説明メッセージで例外が発生します。 これは手で行うのは簡単ですが、DBMSで提供される標準的なものがあるかどうかを尋ねています。 自分で作成したり、サードパーティのパッケージからインポートしたりすることは、作業中のすべてのプロジェクトに対して完全に移植可能で透過的である必要があるため、実用的ではありません。

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