পোস্টগ্রিএসকিউএল: টেবিলের শেষ অ্যাক্সেসের সময়


10

আমি কয়েক ডজন টেবিল সহ একটি বড় পোস্টগ্রিজ এসকিউএল ডাটাবেসের দায়িত্বে আছি। আমি সন্দেহ করি যে এর মধ্যে অনেকগুলি টেবিল কখনও অ্যাক্সেস করা যায় না।

শেষ বার কখন নির্দিষ্ট টেবিলটি অ্যাক্সেস করা হয়েছিল তা যাচাই করার সর্বোত্তম উপায় কী? আমি একটি ট্রিগার যোগ করার কথা ভেবেছিলাম DELETE, INSERTএবং UPDATE, তবে আমি আশা করি আরও কার্যকর উপায় আছে।



ধন্যবাদ, সংশোধন। লগিংয়ের সমাধান হতে পারে তবে ডিবি খুব বেশি ব্যবহৃত হয় এবং লগগুলি সম্ভবত ডিস্কের প্রচুর স্থান গ্রহণ করবে।
আদম মতান

উত্তর:


9

pg_catolog.pg_statio_all_tables আপনার বন্ধু। আপনাকে যা করতে হবে তা হ'ল পর্যালোচনার মধ্যে থাকা টেবিলগুলির জন্য pg_statio_all_tables জরিপ করুন। পরিসংখ্যান-সক্রিয় সারণী, পরিবর্তন না করা পরিসংখ্যান ~ সম্ভাব্য অব্যবহৃত টেবিল পরিবর্তন করা। select pg_stat_reset () ;আপনার নজরদারিটির মাঝামাঝি কেউ যাতে কিছু না করে সেদিকে খেয়াল রাখুন।

উদাহরণ স্বরূপ:

test_1=# create table test_stats (col1 integer);
CREATE TABLE

test_1=# select * from pg_catalog.pg_statio_all_tables 
         where schemaname not in ('pg_catalog', 'information_schema') 
         and relname = 'test_stats';
 relid | schemaname |  relname   | heap_blks_read | heap_blks_hit | idx_blks_read | idx_blks_hit | toast_blks_read | toast_blks_hit | tidx_blks_read | tidx_blks_hit 
-------+------------+------------+----------------+---------------+---------------+--------------+-----------------+----------------+----------------+---------------
 22957 | public     | test_stats |              0 |             0 |        [null] |       [null] |          [null] |         [null] |         [null] |        [null]
(1 row)

সন্নিবেশ:

test_1=# insert into test_stats (col1) select generate_series( 1, 10000000);
INSERT 0 10000000

test_1=# select * from pg_catalog.pg_statio_all_tables
         where schemaname not in ('pg_catalog', 'information_schema') 
         and relname = 'test_stats';
 relid | schemaname |  relname   | heap_blks_read | heap_blks_hit | idx_blks_read | idx_blks_hit | toast_blks_read | toast_blks_hit | tidx_blks_read | tidx_blks_hit 
-------+------------+------------+----------------+---------------+---------------+--------------+-----------------+----------------+----------------+---------------
 22957 | public     | test_stats |          44260 |      10088481 |        [null] |       [null] |          [null] |         [null] |         [null] |        [null]
(1 row)

নির্বাচন:

test_1=# select count (*) from test_stats where col1 between 10000 and 50000;
 count 
-------
 40001
(1 row)

test_1=# select * from pg_catalog.pg_statio_all_tables
         where schemaname not in ('pg_catalog', 'information_schema') 
         and relname = 'test_stats';
 relid | schemaname |  relname   | heap_blks_read | heap_blks_hit | idx_blks_read | idx_blks_hit | toast_blks_read | toast_blks_hit | tidx_blks_read | tidx_blks_hit 
-------+------------+------------+----------------+---------------+---------------+--------------+-----------------+----------------+----------------+---------------
 22957 | public     | test_stats |          85560 |      10091429 |        [null] |       [null] |          [null] |         [null] |         [null] |        [null]
(1 row)

মুছে ফেলে:

test_1=# delete from test_stats where col1 between 10000 and 50000;
DELETE 40001

test_1=# select * from pg_catalog.pg_statio_all_tables
         where schemaname not in ('pg_catalog', 'information_schema') 
         and relname = 'test_stats';
 relid | schemaname |  relname   | heap_blks_read | heap_blks_hit | idx_blks_read | idx_blks_hit | toast_blks_read | toast_blks_hit | tidx_blks_read | tidx_blks_hit 
-------+------------+------------+----------------+---------------+---------------+--------------+-----------------+----------------+----------------+---------------
 22957 | public     | test_stats |         155075 |      10136163 |        [null] |       [null] |          [null] |         [null] |         [null] |        [null]
(1 row)

আপডেট-- 2011-09-01

আরও পরীক্ষা করে বোঝায় যে vacuumpg_statio_all_tables এর মান কিছুটা বাড়িয়েছে যা আপনার পছন্দসই ব্যবহারের জন্য দুর্ভাগ্যজনক। যদিও vacuumবেহুদা pg_statio_all_tables ব্যবহার করতে না, এটি ফলাফল একটু fuzzier ব্যাখ্যা করতে না।

সম্ভবত নিরীক্ষণের জন্য আরও ভাল জায়গা হ'ল pg_catolog.pg_stat_all_tables (কমপক্ষে Pg এর নতুন সংস্করণ সহ)। আমি 8.4 সংস্করণটি দেখছি এবং এতে টিপলগুলি sertedোকানো, পড়া, আপডেট করা এবং মুছে ফেলা হয়েছে - আইআরএস 8.2 তে সমস্ত কিছুই নেই এবং আমি 8.3 সম্পর্কে জানি না তাই আপনি যে পিজি সংস্করণটির উপর নির্ভর করে ওয়াইএমএমভি ব্যবহার.

একটি তৃতীয় বিকল্প (সক্রিয়করণ সন্নিবেশ, আপডেট, এবং মুছে ফেলার জন্য) হ'ল time পিজিডিটিএ / বেস / $ ড্যাটিড ডিরেক্টরিতে ফাইল টাইমস্ট্যাম্পগুলি। ফাইলের নামটি টেবিলের ওডে মানচিত্র করা উচিত, যাতে আপনি সারণীগুলি সন্নিবেশ, আপডেট এবং মুছে না পাচ্ছেন তা সনাক্ত করতে এটি ব্যবহার করতে পারেন। দুর্ভাগ্যক্রমে, এটি এখনও সেই টেবিলগুলিকে সম্বোধন করে না যেগুলি এখনও থেকে নির্বাচিত হচ্ছে এবং টেবিলস্পেসগুলি ব্যবহার করে অতিরিক্ত জটিলতা সৃষ্টি করবে (কারণ এই ফাইলগুলি $ পিজিডিটিএ / বেস / ati ড্যাটিডের অধীন হবে না)। কোনও মুলতুবি পরিবর্তনগুলি ফ্লাশ না হওয়া অবধি টাইমস্ট্যাম্পগুলি আপডেট হবে না, তবে ফাইলগুলি কয়েক মাসের মধ্যে পরিবর্তিত না হলে বর্তমানে মুলতুবি পরিবর্তনের প্রতিক্রিয়া সম্ভবত সামান্য are


3

আপনি একটি টেবিলের সাথে শেষ পরিবর্তন সম্পর্কে কিছু তথ্য পেতে পারেন xmin, উদাহরণস্বরূপ:

select max(xmin::text::bigint) from t;

তবে, আপনাকে মডুলো এবং মোড়ক এবং হিমায়িত xids সম্পর্কে সচেতন হওয়া দরকার । এটিকে "সময়" রূপান্তর করার কোনও উপায় নেই তবে আপনি যদি এখনই আপনার টেবিলগুলির জন্য মানটি ক্যাপচার করেন তবে পরবর্তী তারিখে তুলনা করুন, আপনি যে টেবিলগুলির পরিবর্তন করেছেন তার একটি তালিকা পেতে পারেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.