mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-11 01:54:55 +00:00
dbms: added profile events for AIO and ordinary IO [#METR-15090].
This commit is contained in:
parent
456b10a02b
commit
4c703cbfd7
@ -14,6 +14,13 @@
|
|||||||
M(FileOpen) \
|
M(FileOpen) \
|
||||||
M(Seek) \
|
M(Seek) \
|
||||||
M(ReadBufferFromFileDescriptorRead) \
|
M(ReadBufferFromFileDescriptorRead) \
|
||||||
|
M(ReadBufferFromFileDescriptorReadBytes) \
|
||||||
|
M(WriteBufferFromFileDescriptorWrite) \
|
||||||
|
M(WriteBufferFromFileDescriptorWriteBytes) \
|
||||||
|
M(ReadBufferAIORead) \
|
||||||
|
M(ReadBufferAIOReadBytes) \
|
||||||
|
M(WriteBufferAIOWrite) \
|
||||||
|
M(WriteBufferAIOWriteBytes) \
|
||||||
M(ReadCompressedBytes) \
|
M(ReadCompressedBytes) \
|
||||||
M(CompressedReadBufferBlocks) \
|
M(CompressedReadBufferBlocks) \
|
||||||
M(CompressedReadBufferBytes) \
|
M(CompressedReadBufferBytes) \
|
||||||
@ -27,6 +34,10 @@
|
|||||||
M(FunctionExecute) \
|
M(FunctionExecute) \
|
||||||
M(MarkCacheHits) \
|
M(MarkCacheHits) \
|
||||||
M(MarkCacheMisses) \
|
M(MarkCacheMisses) \
|
||||||
|
M(CreatedReadBufferOrdinary) \
|
||||||
|
M(CreatedReadBufferAIO) \
|
||||||
|
M(CreatedWriteBufferOrdinary) \
|
||||||
|
M(CreatedWriteBufferAIO) \
|
||||||
\
|
\
|
||||||
M(ReplicatedPartFetches) \
|
M(ReplicatedPartFetches) \
|
||||||
M(ReplicatedPartFailedFetches) \
|
M(ReplicatedPartFailedFetches) \
|
||||||
|
@ -24,7 +24,7 @@ class ReadBufferFromFileDescriptor : public ReadBufferFromFileBase
|
|||||||
protected:
|
protected:
|
||||||
int fd;
|
int fd;
|
||||||
off_t pos_in_file; /// Какому сдвигу в файле соответствует working_buffer.end().
|
off_t pos_in_file; /// Какому сдвигу в файле соответствует working_buffer.end().
|
||||||
|
|
||||||
bool nextImpl()
|
bool nextImpl()
|
||||||
{
|
{
|
||||||
size_t bytes_read = 0;
|
size_t bytes_read = 0;
|
||||||
@ -35,7 +35,7 @@ protected:
|
|||||||
ssize_t res = ::read(fd, internal_buffer.begin(), internal_buffer.size());
|
ssize_t res = ::read(fd, internal_buffer.begin(), internal_buffer.size());
|
||||||
if (!res)
|
if (!res)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (-1 == res && errno != EINTR)
|
if (-1 == res && errno != EINTR)
|
||||||
throwFromErrno("Cannot read from file " + getFileName(), ErrorCodes::CANNOT_READ_FROM_FILE_DESCRIPTOR);
|
throwFromErrno("Cannot read from file " + getFileName(), ErrorCodes::CANNOT_READ_FROM_FILE_DESCRIPTOR);
|
||||||
|
|
||||||
@ -46,7 +46,10 @@ protected:
|
|||||||
pos_in_file += bytes_read;
|
pos_in_file += bytes_read;
|
||||||
|
|
||||||
if (bytes_read)
|
if (bytes_read)
|
||||||
|
{
|
||||||
|
ProfileEvents::increment(ProfileEvents::ReadBufferFromFileDescriptorReadBytes, bytes_read);
|
||||||
working_buffer.resize(bytes_read);
|
working_buffer.resize(bytes_read);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include <DB/Core/Exception.h>
|
#include <DB/Core/Exception.h>
|
||||||
#include <DB/Core/ErrorCodes.h>
|
#include <DB/Core/ErrorCodes.h>
|
||||||
|
#include <DB/Common/ProfileEvents.h>
|
||||||
|
|
||||||
#include <DB/IO/WriteBufferFromFileBase.h>
|
#include <DB/IO/WriteBufferFromFileBase.h>
|
||||||
#include <DB/IO/WriteBuffer.h>
|
#include <DB/IO/WriteBuffer.h>
|
||||||
@ -21,7 +22,7 @@ class WriteBufferFromFileDescriptor : public WriteBufferFromFileBase
|
|||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
void nextImpl()
|
void nextImpl()
|
||||||
{
|
{
|
||||||
if (!offset())
|
if (!offset())
|
||||||
@ -30,6 +31,8 @@ protected:
|
|||||||
size_t bytes_written = 0;
|
size_t bytes_written = 0;
|
||||||
while (bytes_written != offset())
|
while (bytes_written != offset())
|
||||||
{
|
{
|
||||||
|
ProfileEvents::increment(ProfileEvents::WriteBufferFromFileDescriptorWrite);
|
||||||
|
|
||||||
ssize_t res = ::write(fd, working_buffer.begin() + bytes_written, offset() - bytes_written);
|
ssize_t res = ::write(fd, working_buffer.begin() + bytes_written, offset() - bytes_written);
|
||||||
|
|
||||||
if ((-1 == res || 0 == res) && errno != EINTR)
|
if ((-1 == res || 0 == res) && errno != EINTR)
|
||||||
@ -38,6 +41,8 @@ protected:
|
|||||||
if (res > 0)
|
if (res > 0)
|
||||||
bytes_written += res;
|
bytes_written += res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProfileEvents::increment(ProfileEvents::WriteBufferFromFileDescriptorWriteBytes, bytes_written);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Имя или описание файла
|
/// Имя или описание файла
|
||||||
|
@ -151,6 +151,10 @@ void ReadBufferAIO::synchronousRead()
|
|||||||
{
|
{
|
||||||
prepare();
|
prepare();
|
||||||
bytes_read = ::pread(fd, buffer_begin, region_aligned_size, region_aligned_begin);
|
bytes_read = ::pread(fd, buffer_begin, region_aligned_size, region_aligned_begin);
|
||||||
|
|
||||||
|
ProfileEvents::increment(ProfileEvents::ReadBufferAIORead);
|
||||||
|
ProfileEvents::increment(ProfileEvents::ReadBufferAIOReadBytes, bytes_read);
|
||||||
|
|
||||||
finalize();
|
finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,6 +194,9 @@ bool ReadBufferAIO::waitForAIOCompletion()
|
|||||||
is_pending_read = false;
|
is_pending_read = false;
|
||||||
bytes_read = events[0].res;
|
bytes_read = events[0].res;
|
||||||
|
|
||||||
|
ProfileEvents::increment(ProfileEvents::ReadBufferAIORead);
|
||||||
|
ProfileEvents::increment(ProfileEvents::ReadBufferAIOReadBytes, bytes_read);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,6 +175,9 @@ bool WriteBufferAIO::waitForAIOCompletion()
|
|||||||
is_pending_write = false;
|
is_pending_write = false;
|
||||||
bytes_written = events[0].res;
|
bytes_written = events[0].res;
|
||||||
|
|
||||||
|
ProfileEvents::increment(ProfileEvents::WriteBufferAIOWrite);
|
||||||
|
ProfileEvents::increment(ProfileEvents::WriteBufferAIOWriteBytes, bytes_written);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include <DB/IO/createReadBufferFromFileBase.h>
|
#include <DB/IO/createReadBufferFromFileBase.h>
|
||||||
#include <DB/IO/ReadBufferFromFile.h>
|
#include <DB/IO/ReadBufferFromFile.h>
|
||||||
#include <DB/IO/ReadBufferAIO.h>
|
#include <DB/IO/ReadBufferAIO.h>
|
||||||
|
#include <DB/Common/ProfileEvents.h>
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
@ -9,9 +10,15 @@ ReadBufferFromFileBase * createReadBufferFromFileBase(const std::string & filena
|
|||||||
size_t aio_threshold, size_t buffer_size_, int flags_, char * existing_memory_, size_t alignment)
|
size_t aio_threshold, size_t buffer_size_, int flags_, char * existing_memory_, size_t alignment)
|
||||||
{
|
{
|
||||||
if ((aio_threshold == 0) || (estimated_size < aio_threshold))
|
if ((aio_threshold == 0) || (estimated_size < aio_threshold))
|
||||||
|
{
|
||||||
|
ProfileEvents::increment(ProfileEvents::CreatedReadBufferOrdinary);
|
||||||
return new ReadBufferFromFile(filename_, buffer_size_, flags_, existing_memory_, alignment);
|
return new ReadBufferFromFile(filename_, buffer_size_, flags_, existing_memory_, alignment);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
ProfileEvents::increment(ProfileEvents::CreatedReadBufferAIO);
|
||||||
return new ReadBufferAIO(filename_, buffer_size_, flags_, existing_memory_);
|
return new ReadBufferAIO(filename_, buffer_size_, flags_, existing_memory_);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include <DB/IO/createWriteBufferFromFileBase.h>
|
#include <DB/IO/createWriteBufferFromFileBase.h>
|
||||||
#include <DB/IO/WriteBufferFromFile.h>
|
#include <DB/IO/WriteBufferFromFile.h>
|
||||||
#include <DB/IO/WriteBufferAIO.h>
|
#include <DB/IO/WriteBufferAIO.h>
|
||||||
|
#include <DB/Common/ProfileEvents.h>
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
@ -10,9 +11,15 @@ WriteBufferFromFileBase * createWriteBufferFromFileBase(const std::string & file
|
|||||||
size_t alignment)
|
size_t alignment)
|
||||||
{
|
{
|
||||||
if ((aio_threshold == 0) || (estimated_size < aio_threshold))
|
if ((aio_threshold == 0) || (estimated_size < aio_threshold))
|
||||||
|
{
|
||||||
|
ProfileEvents::increment(ProfileEvents::CreatedWriteBufferOrdinary);
|
||||||
return new WriteBufferFromFile(filename_, buffer_size_, flags_, mode, existing_memory_, alignment);
|
return new WriteBufferFromFile(filename_, buffer_size_, flags_, mode, existing_memory_, alignment);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
ProfileEvents::increment(ProfileEvents::CreatedWriteBufferAIO);
|
||||||
return new WriteBufferAIO(filename_, buffer_size_, flags_, mode, existing_memory_);
|
return new WriteBufferAIO(filename_, buffer_size_, flags_, mode, existing_memory_);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user