別のサーバーにあるDBからSELECT結果が帰ってこない

このQ&Aのポイント
  • 別のサーバーにあるDBからSELECTした結果が帰ってこない問題が発生しています。
  • 新しいサーバーへの移行に伴い、SELECT結果の取得に問題が発生しています。
  • 移行前の環境ではSELECT結果が正常に帰ってきていたが、新しい環境では件数が多くなると帰ってこない問題が発生しています。
回答を見る
  • ベストアンサー

別のサーバーにあるDBに対してSELECTした結果が帰ってこない。

別のサーバーにあるDBに対してSELECTした結果が帰ってこない。 質問はタイトル通り、別のサーバーにあるDBに対してSELECTした結果が帰ってきません。 あるwebサイトを新しいサーバーに移行する事になりました。 データベースはwebサイトと同じサーバーに準備していたのですが 新しいサーバーに移行する際に別のサーバーに準備する事になりました。 そして新しい環境で動作検証をしていて特に問題なく進んでいたのですが・・・・ 旧環境では特に問題なくSELECTした結果が帰ってきていましたが 新しい環境ではデータ取得の際に件数が多くなるとSELECTした結果が帰ってきませんでした。 SELECTした結果は約7000件~30000件のデータを取得するようになっております。 (新しい環境で1000件近くのデータを取得しようとしたら約5分かかりました。) これはSQL文が悪いのでしょうか、それともphpの設定が悪いのか、postgresqlの設定が 悪いのか特定出来ずに困り果てております。。。 何でも構いませんのでご助言を頂けたら幸いです。 ■環境について □以前の環境 同じサーバー内にphpとpostgresqlがある Postgresqlのバージョンは8.0.3で、phpのバージョンは5.0.5です。 □現在の環境 別のサーバーにphpとpostgresqlがある Postgresqlのバージョンは8.1.18で、phpのバージョンは5.1.6です。 ■データ取得テーブル □テーブル名 テストテーブル □フィールド数 100 (登録時刻フィールドはタイムスタンプ型です) □SQL文例 Select * From テストテーブル Where 登録時刻フィールド >= 'yyyy-mm-dd' AND 登録時刻フィールド <= 'yyyy-mm-dd'

質問者が選んだベストアンサー

  • ベストアンサー
  • mimzy
  • ベストアンサー率33% (32/96)
回答No.1

phpとpostgresは同じネットワークにあるんですか? 環境で変わったのはそこなんですから、とりあえずパケットトレースしてみては?

temjin0126
質問者

お礼

ご回答ありがとうございます。 >>phpとpostgresは同じネットワークにあるんですか? 同じネットワークにあります。 結局原因は、Select処理を行う際、PHPのスクリプトの 使用するメモリサイズが、 サーバで設定しておりました上限値を超えたため、PHPがFATAL ERRORを起こしていました。 PHPスクリプトが使用可能なメモリサイズを増やすことにより正常にSelect処理が行えるようになりました。

関連するQ&A

  • SELECTした結果をSELECTしたい!

    初めて利用させていただきます。 -miru-と申します。 現在、 RDBMS:IBM DB2 7.2 OS:Windows 2000 なのですが、 タイトルの通り、 SELECT結果がSELECTできず困っています。 やりたい事の概要 YMD_DATAはDATE型です。 1. SELECT YMD_DATA FROM TEST.TEST_TABLE WHERE YMD_DATA < '2004-10-15' AND FLAG = '1' ORDER BY YMD_DATA DESC FETCH FIRST 30 ROWS ONLY でFLAGが1且つ指定した年月日以前のデータを 新しいものから30件取得 2. 1で取得した結果の一番古い年月日(30個目のデータ)を  取得 と、いう感じなのですが、どうもうまくいきません。。 1つのSQLで書きたいのですが、これは可能でしょうか? 分かる方がいらっしゃいましたら、 ご教授お願いいたします。 失礼します。

  • Select文で2つのフィールドを加算した結果を取得したい

    Select文で2つのフィールドを加算した結果を取得したいと思います。しかし2つのフィールドのうち1つがNullの値だと残りのフィールドに値が入っていても空白(NULL?)で返ります。 [例]********************************************** フィールドA:Null フィールドB:300 SELECT フィールドA+フィールドB FROM テーブルA <Selectされた結果> 空白(何も表示されない。Null?) [例]********************************************** どのようにすれば、Nullでない値だけ取得できるでしょうか。

  • タイムスタンプを秒数で取得したい

    DB初心者で、PostgreSQL V.7.3.2 + PHP を使っています。 T_TIME というテーブルに、 日付を格納したTARGET_DATEと、 時刻を  〃 TARGET_TIMEというフィールドがあります。 このテーブルからタイムスタンプをセレクトしたいと思い、つぎのようなSQL文を 作成しました。 SELECT TO_TIMESTAMP(TARGET_DATE ||' '|| TARGET_TIME, 'YYYY-MM-DD HH24:MI') AS JIKOKU FROM T_TIME ところが、この結果は書式化された文字列のため時刻の比較を簡単に行うことができません。 なんとか書式化した形でなく、1970年からの秒数でタイムスタンプを取得したいのですが。 どうすれば良いのでしょうか。

  • postgresqlサーバーのチューニングについて

    現在、Access2010+Postgresqlにてシステムを構築しており ADOにてデータベースからレコードの検索・追加・更新を行っております。 今回質問させて頂きましたのはpostgresqlのチューニング方法についてです。 現在、あるテーブルにWANからVPNを経由して接続した状態でSELECTを行うと、 結果が帰ってくるまでにおよそ6分程度かかるテーブルがあります。 (LAN内では4秒程度) 抽出するフィールドを*ではなく、1フィールドに限定しても約4分程度かかります。 そのテーブルには約30000件ほどレコードが格納されており SELECTする際は、bool型のフィールドをWHERE条件に入れています。 例)SELECT * FROM tbl_test WHERE f条件 = TRUE; しかし同じテーブルの別のvarchar型フィールドにLIKE演算子で検索を かけると、すぐ(0.44秒)に結果が帰ってきます。 例)SELECT * FROM tbl_test WHERE 名称 LIKE '%テスト%'; 尚、この場合の結果は20件ほどですので、結果が早いのは当然ですが なぜbool型を条件にした場合に6分もかかってしまうのでしょうか。 システムの都合上、WANからVPNを経由してアクセスする事が必須ですので LAN内の速度が速くてもWANからの速度が遅いのはNGなのです。 一応、Web上で紹介されている一般的なチューニング方法を参考にし postgresql.confの設定値は下記の通りに行いました。 ・shared_buffers → 1024MB ・max_connections → 100 ・effective_cache_size → 512MB ・random_page_count → 2 ・work_mem → 3MB 恐らく根本的にどこかの設定や設計がまずい為、このような結果に なっているのであろうと思うのですが、それを特定するに至りません。 見直すべき点やアドバイスなどがあれば教えて下さい。 <サーバースペック> OS:WindowsXP Pro SP3 メモリ:3GB CPU:Pen4 2.8GHz Postgresqlバージョン:8.3

  • トランザクション中にSELECTした場合について

    InnoDBを使っているのですが、 以下の1.から5.の処理の間に、サーバー1.の「テーブルA」へ SELECTを掛けた場合、何か遅い気がします・・原因は何でしょうか? 1.サーバー1でトランザクション開始 2.サーバー1の「テーブルA」をDELETEでを全削除 3.サーバー2から「テーブルA」の新しいデータを取得 4.3.で取得したデータをサーバー1の「テーブルA」へINSERT 5.サーバー1でトランザクション終了 他のトランザクションでDELETEされたレコードに対し、 SELECTすると結果が返るのは遅いでしょうか?

    • ベストアンサー
    • MySQL
  • Zend_DBを使ったselectで文字が途切れてしまいます

    Zend_DBとSQL Server2005で文字列項目をselectすると、半角255文字で途切れてしまいます。なお、PHPのバージョンは5.2.5です。 項目には255文字以上insertされているので、どうもselectの時に起こるようなのですが、どのようにすれば途切れずに値が取得できるかご存知の方がいらっしゃいましたら、どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • レンタルサーバーのDB

    某レンタルサーバーを借りて データベースを利用しPostgreSQL、PHPで オンラインショップみたいなのを作りたいのですが、 サーバーHP上の会員コントロールパネルからテーブルはつくってもらえたのですが、そこからサポートしてくれないので作業が進みません。。。 普通どうやってレンタルサーバー内のDBにアクセスするのでしょうか? とっても困ってます。 どなたか宜しくお願いします!!!

  • SELECT のWHEREに別のSELECT

    SELECT のWHEREに別のSELECTの結果を当てはめることは可能でしょうか? ただし、引用テーブルは同じテーブルとします。(DDD) 例 SELECT * FROM DDD WHERE B = (SELECT B FROM DDD WHERE C=1) 再起SQLとはまた違うのでしょうか?

  • date型のselect について

    質問させてください。 今、テーブル(test_tbl)にフィールドjikan(date型)があるとします。 jikanフィールドの値を取得したいのですが、 select to_date(jikan, 'YYYY/MM/DD HH24:MI:SS') from test_tbl; と実行すると、 01-11-10 01-11-11 01-11-12 01-11-13 01-11-14 01-11-15 01-11-16 となってしまいます。 質問店としては、 なぜ、フォーマットを指定しているにもかかわらず、 (1) 年が4桁表示ではなく、2桁表示なのか? (2) 時間部分は表示しない、もしくはデータがない? の2点をお教えください。 ご迷惑をお掛けしますが、宜しくお願い致します。

  • 異なるDBのSQL

    SQLを始めたばかりの初心者です。 oo4oやADOを使用して、オラクルサーバーのデータをSELECT文で オラクル内の複数のテーブルを結合してListViewで表示する プログラムを作成中です。 オラクルサーバーにメインデーターがあり 各クライアントにMDB形式でマスタデータがあります。 MDBのマスタデータにはたとえばですが、テーブル名 [商品テーブル] フィールド名[コードナンバー]、[商品名]... となっており、サーバーには、テーブル名[商品コード]  フィールド名[コードナンバー]、[受注日]....があるとします。 クライアントからoo4oやADOを使用して、サーバーのデータを SELECT文でオラクル内の複数のテーブルを結合して ListViewで表示するのはできます。しかし [コードナンバー]は取得できるのですが、サーバーのテーブルには、 [商品名]がないためとうぜん表示できません。 この場合、オラクルから取得したデータをマスタデータのあるMDBに新しくテーブルを 作りそこに一度格納して再度ADOで結合処理して 商品名を表示する方法しか考えつかないのですが、 ほかに良い方法はありますでしょうか? ADOで接続MDBに保存再度ADOで接続して表示では レスポンスが悪いかなと思いまして... *VB6 winXP-pro オラクル9i